EXT 如何通过连接新增tab 页签

EXT 如何通过连接新增tab 页签,第1张

你好像起始页用了iframe是吧?

这样的话,首先获取iframe外面的Ext

var myExt = top.Ext

var tabs = myExt.getCmp("你的Tabpanel id")//获取TabPanel

给你的“新增用户”添加onclick="javascript:addTab()"来触发下面的这个函数,

这个函数中则进行了添加新页签(且先判断了是否已存在该页签)

function addTab(){

var addUserPanel = tabs.getComponent(“addUser”)

if(!addUserPanel ){//先判断你需要打开的tab页是否已经打开

addUserPanel = new Ext.Panel({

id : “addUser”,

title : “新增用户",

iconCls: 'tabs',

tabTip : "新增用户",

closable : true,

html : "新增用户界面"

})

tabs.add(addUserPanel )

}

tabs.setActiveTab(addUserPanel )

}

Tab Control是一个标签控件,只有标签,标签下面的窗体要你自己创建的子窗体、并通过回调、或者消息的方式来实现隐藏、显示,从而实现标签+显示选中的子窗体的效果。

MFC使用CTabCtrl进行封装,大致的流程是

1.创建TabCtrl

2.通过InsertItem方法添加页签

3.创建子窗体,指定这些窗体的父窗体为 上面创建的TabCtrl

4.在TabCtrl的父窗体类 或者 TabCtrl的继承类中 添加ON_NOTIFY响应消息, OnSize消息

5.实现消息响应函数

参考代码:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

... ...

int nCtrlID = 1, nTabIndex = 0

if ( !m_wndTab.Create( TCS_FOCUSNEVER|WS_VISIBLE|TCS_RIGHTJUSTIFY, CRect( 0, 0, 0, 0 ), &m_wndView, nCtrlID++ ) )

{

TRACE0("Failed to create m_wndTab \n")

return -1

}

CFont tabFont

tabFont.CreateFont(12,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,

"宋体")

m_wndTab.SetFont(&tabFont,true)

tabFont.Detach()

m_wndTab.InsertItem( nTabIndex++, "错误" )

if ( !m_wndErrEvent.Create( WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_NOSORTHEADER, CRect( 0, 0, 0, 0 ), &m_wndTab, nCtrlID++ ) )

{

TRACE0("Failed to create m_wndErrEvent \n")

return -1

}

m_wndErrEvent.SetExtendedStyle( LVS_EX_FULLROWSELECT )

m_wndErrEvent.InsertColumn( 0, "时间" )

m_wndErrEvent.InsertColumn( 1, "错误事件" )

m_wndErrEvent.ShowWindow( SW_SHOW )

m_wndTab.InsertItem( nTabIndex++, "调试" )

if ( !m_wndDebugEvent.Create( WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_NOSORTHEADER, CRect( 0, 0, 0, 0 ), &m_wndTab, nCtrlID++ ) )

{

TRACE0("Failed to create m_wndDebugEvent \n")

return -1

}

m_wndDebugEvent.SetExtendedStyle( LVS_EX_FULLROWSELECT )

m_wndDebugEvent.InsertColumn( 0, "时间" )

m_wndDebugEvent.InsertColumn( 1, "调试事件" )

m_wndErrEvent.ShowWindow( SW_HIDE )

m_wndDebugEvent.ShowWindow( SW_SHOW )

m_wndTab.SetCurSel( m_wndTab.GetItemCount() - 1 )

}

ChildView.h:

//{{AFX_MSG(CChildView)

afx_msg void OnPaint()

afx_msg void OnSize(UINT nType, int cx, int cy)

//}}AFX_MSG

afx_msg void OnSelChangeTab(NMHDR *pNotify,LRESULT *pResult)

DECLARE_MESSAGE_MAP()

ChildView.cpp:

BEGIN_MESSAGE_MAP(CChildView,CWnd )

//{{AFX_MSG_MAP(CChildView)

ON_WM_PAINT()

ON_WM_SIZE()

//}}AFX_MSG_MAP

ON_NOTIFY(TCN_SELCHANGE,1,OnSelChangeTab)

END_MESSAGE_MAP()

void CChildView::OnSize(UINT nType, int cx, int cy)

{

CWnd ::OnSize(nType, cx, cy)

if (IsWindow(((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.m_hWnd))

{

CRect viewRect

this->GetClientRect(viewRect)

((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.MoveWindow(viewRect)

CRect tabRect

((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.GetClientRect(tabRect)

((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.AdjustRect(FALSE,tabRect)

if (IsWindow(((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.m_hWnd))

{

((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.MoveWindow(tabRect)

}

if (IsWindow(((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.m_hWnd))

{

((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.MoveWindow(tabRect)

}

for ( int i = 0i <2i++ )

{

((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.SetColumnWidth( i, LVSCW_AUTOSIZE_USEHEADER )

((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.SetColumnWidth( i, LVSCW_AUTOSIZE_USEHEADER )

}

}

}

void CChildView::OnSelChangeTab(NMHDR *pNotify,LRESULT *pResult)

{

int cursel=((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.GetCurSel()

if ( cursel == ((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.GetItemCount() - 1 )

{

((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.ShowWindow(SW_SHOW)

((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.ShowWindow(SW_HIDE)

}

else if ( cursel == 0 )

{

((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.ShowWindow(SW_HIDE)

((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.ShowWindow(SW_SHOW)

}

}

动态tab页签获取ref问题是一个比较复杂的问题,需要使用JavaScript来实现。首先,要在每个tab页签上添加一个ref属性,以便在页面加载时获取它们。然后,使用JavaScript来监听tab页签的点击事件,当用户点击某个tab页签时,就可以通过ref属性获取到它的值。最后,根据获取的值来进行相应的处理即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11694904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存