VC++中怎样在指定的TreeCtrl节点中添加子节点?

VC++中怎样在指定的TreeCtrl节点中添加子节点?,第1张

CTreeCtrl* pCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE1)

ASSERT(pCtrl != NULL)

// Insert a root item using the structure. We must

// initialize a TVINSERTSTRUCT structure and pass its

// address to the call.

TVINSERTSTRUCT tvInsert // 这是定义了一个父节点

tvInsert.hParent = NULL

tvInsert.hInsertAfter = NULL

tvInsert.item.mask = TVIF_TEXT

tvInsert.item.pszText = _T("United States")

HTREEITEM hCountry = pCtrl->InsertItem(&tvInsert) // 插入父节点,记住前面这个hCountry 下面又把它作为了父节点

HTREEITEM hPA = pCtrl->InsertItem(TVIF_TEXT,

_T("Pennsylvania"), 0, 0, 0, 0, 0, hCountry, NULL)//这里插入一个hCountry 的子节点

HTREEITEM hWA = pCtrl->InsertItem(_T("Washington"),// 这里又插入一个hCountry 的子节点并且放在hPA的后面(是同一个辈分的)

0, 0, hCountry, hPA)

pCtrl->InsertItem(_T("Pittsburgh"), hPA, TVI_SORT)// 这里连续插入了三个hPA的子节点

pCtrl->InsertItem(_T("Harrisburg"), hPA, TVI_SORT)

pCtrl->InsertItem(_T("Altoona"), hPA, TVI_SORT)

pCtrl->InsertItem(_T("Seattle"), hWA, TVI_SORT) //这里插入了3个hWA的子节点

pCtrl->InsertItem(_T("Kalaloch"), hWA, TVI_SORT)

pCtrl->InsertItem(_T("Yakima"), hWA, TVI_SORT)根据上面的方法,你可以插入自己的节点了下面给你函数原型看看 HTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct )HTREEITEM InsertItem( UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, HTREEITEM hParent, HTREEITEM hInsertAfter )HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST )HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST)

TreeNode

RootNode=new

TreeNode()

this.treeView1.Nodes.Add(RootNode)

就这样加根节点,子节点也是同样方法。

语句:

ParentNode.ChildNodes.Add(ChildNode)

其中:

ParentNode:父结点

ChildNodes:VS默认的父节点属性,用于获取父结点的第一级子节点

Add:

VS默认的结点添加方法

ChildNode:

所要插入的子节点

从你的数据表中读出父子节点表到DataTable中,然后按上下级关系一个个添加就可以。添加父子节点只需另写一个功能很数据表中加就行,比较简单。

给你一个示例,大概是这样子。

private void ShowTree()

{

this.SystemTree.Nodes.Clear()

TreeNode rootNode = new TreeNode()

rootNode.Text = "XXXXXXXX"

rootNode.Value = ""

int status = 0

rootNode.NavigateUrl = "javascript:SelectNode('root',' '," + Convert.ToString(nodeid++) + "," + status + ")"

this.SystemTree.Nodes.Add(rootNode)

SubsystemManagement subSystem = new SubsystemManagement()

DataTable dt = new DataTable()

dt = subSystem.GetAllsubsystemInfo() //显示子系统名称

foreach (DataRow dr in dt.Rows)

{

TreeNode subNode = new TreeNode()

string subSysName = dr["CFunName"].ToString()

subNode.Text = subSysName

string subSysId = dr["CFunctionID"].ToString()

subNode.Value = subSysId

status = 1

subNode.NavigateUrl = "javascript:SelectNode('subsys','" + subSysId + "'," + Convert.ToString((nodeid++)) + "," + status + ")"

rootNode.ChildNodes.Add(subNode)

rootNode.Expanded = true

DataTable sdt = new DataTable()

sdt = subSystem.GetModulesBySubSysId(subSysId)//显示模块名称

foreach (DataRow sdr in sdt.Rows)

{

TreeNode sNode = new TreeNode()

string moduleName = sdr["CFunName"].ToString()

sNode.Text = moduleName

string moduleId = sdr["CFunctionId"].ToString()

sNode.Value = moduleId

status = 1

sNode.NavigateUrl = "javascript:SelectNode('module','" + moduleId + "'," + Convert.ToString((nodeid++)) + "," + status + ")"

subNode.ChildNodes.Add(sNode)

subNode.Expanded = true

DataTable fdt = new DataTable()

fdt = subSystem.GetFunctionsByModuleId(moduleId)//显示功能名称

foreach (DataRow fdr in fdt.Rows)

{

TreeNode fNode = new TreeNode()

fNode.Text = fdr["CFunName"].ToString()

fNode.Value = fdr["CFunctionId"].ToString()

status = 2

fNode.NavigateUrl = "javascript:SelectNode('function','" + fdr["CFunctionId"].ToString() + "'," + Convert.ToString((nodeid++)) + "," + status + ")"

sNode.ChildNodes.Add(fNode)

sNode.Expanded = false

}

}

}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存