tree control如何只treeview添加根节点父节点但不treeview添加根节点子节点

请教:tree control如何设置具有子节点的节点在初始状态就打开
&来源:读书人网&【读书人网():综合教育门户网站】
请问:tree control怎么设置具有子节点的节点在初始状态就打开?我的treecontrol代码如下TVINSERTSTRUCTtvn
请问:tree control怎么设置具有子节点的节点在初始状态就打开?我的tree & control代码如下
& TVINSERTSTRUCT &
& HTREEITEM &
& titem[5];
& tvn.hInsertAfter=NULL; &
& tvn.hParent=NULL; &
& tvn.item.mask=TVIF_TEXT/*|TVIF_IMAGE|TVIF_SELECTEDIMAGE*/; &
& tvn.item.state=TVIS_EXPANDED; &
& tvn.item.pszText=L &Folder1 &; &
& titem[0]=TreeView_InsertItem(hwndtree,&tvn); &
& tvn.item.pszText=L &Folder2 &; &
& titem[1]=TreeView_InsertItem(hwndtree,&tvn); &
& tvn.item.pszText=L &Folder3 &; &
& titem[2]=TreeView_InsertItem(hwndtree,&tvn); &
& tvn.item.pszText=L &Folder4 &; &
& tvn.item.state & = & TVIS_EXPANDED; &
& titem[3]=TreeView_InsertItem(hwndtree,&tvn);
& tvn.hInsertAfter & = & NULL;
& tvn.hParent & = & titem[3];
& tvn.item.mask & = & TVIF_TEXT;
& tvn.item.pszText & = & L &subfolder &;
& titem[4] & = & TreeView_InsertItem(hwndtree,&tvn);
& tvn.item.state & = & TVIS_EXPANDED;
& refresh2(hWnd);
& TreeView_Expand(hWnd,titem[3],TVE_EXPAND|TVE_EXPANDPARTIAL);
& if(TreeView_EnsureVisible(hWnd,titem[4]))
output(L &OK &);
output(L &FAIL &);
但是效果是需要鼠标点击节点才会打开,请问该怎么改才能是界面一出来节点就是打开状态?谢谢:)[解决办法]CTreeCtrl::Expand[解决办法]用递归
void CXXXXr::ExpandTree(HTREEITEM hItem)
m_TreeProject.Expand(hItem,TVE_EXPAND);
if(hItem = m_TreeProject.GetNextItem(hItem,TVGN_CHILD))//如果有子节点
m_TreeProject.Expand(hItem,TVE_EXPAND);
ExpandTree(hItem);
while( hItem = m_TreeProject.GetNextItem(hItem,TVGN_NEXT) )
{//遍历兄弟节点
ExpandTree(hItem);
使用方法 :ExpandTree(m_Tree.GetRootItem)winform的treeview如何代码添加父节点和相应子节点
[问题点数:40分,结帖人yuliang2987780]
winform的treeview如何代码添加父节点和相应子节点
[问题点数:40分,结帖人yuliang2987780]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。& VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
&&&&&& 前面一节讲了,本节继续讲下半部分,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例。&&&&&& 树形控件的创建&&&&&& 为树形控件提供了CTreeCtrl类,它封装了树形控件的所有操作。&&&&&& 树形控件的创建也是有两种方式,一种是在对话框模板中直接拖入Tree Control控件创建,另一种就是通过CTreeCtrl类的Create成员函数创建。下面主要讲后者。&&&&&& CTreeCtrl类的Create成员函数的原型如下:&&&&&&&virtual BOOL Create(&&&&&&&&&&&&& DWORD dwStyle,&&&&&&&&&&&&& const RECT& rect,&&&&&&&&&&&&&&CWnd* pParentWnd,&&&&&&&&&&&&& UINT nID&&&&&&& );&&&&&& 此函数的原型与前面讲到的所有控件类的Create函数都类似。dwStyle指定树形控件风格的组合,rect指定树形控件窗口的位置和大小,pParentWnd为指向树形控件父窗口的指针,nID指定树形控件的ID。下面还是主要讲讲树形控件的主要风格以及含义。&&&&&& TVS_DISABLEDRAGDROP:禁止树形控件发送TVN_BEGINDRAG通知消息,即不支持拖动操作&&&&&& TVS_EDITLABELS:用户可以编辑节点的标签文本&&&&&& TVS_HASBUTTONS:显示带有"+"或"-"的小方框来表示某项能否被展开或已展开&&&&&& TVS_HASLINES:在父节点与子节点间连线以更清晰地显示树的结构&&&&&& TVS_LINESATROOT:在根节点处连线&&&&&& TVS_SHOWSELALWAYS:即使控件失去输入焦点,仍显示出项的选择状态&&&&&& 同样,动态创建树形控件时,除了能够指定上述风格的组合外,一般还要指定WS_CHILD和WS_VISIBLE风格。&&&&&& 在中直接拖入Tree Control创建树形控件时,可以在树形控件的属性页中设置其风格,与上面的风格是对应的,例如,属性Has Lines对应的就是TVS_HASLINES风格。&&&&&&&CTreeCtrl类的主要成员函数&&&&&& CImageList* SetImageList(CImageList * pImageList,int nImageListType);&&&&&& 如果树节点需要显示图标时,则必须先创建一个CImageList类的对象,并为其添加多个图像组成一个图像序列,然后调用SetImageList函数为树形控件设置图像序列,在用InsertItem插入节点时传入所需图像在图像序列中的索引即可。后面的例子中会演示。参数pImageList为指向图像序列类CImageList的对象的指针,若为NULL则删除树形控件的所有图像。参数nImageListType指定图像序列的类型,可以是TVSIL_NORMAL(普通图像序列)或TVSIL_STATE(状态图像序列,用图像表示节点的状态)。&&&&&& UINT GetCount( )&&&&&& 获取树形控件中节点的数量。&&&&&& DWORD_PTR GetItemData(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的附加32位数据。参数hItem为指定的树节点的句柄。&&&&&& BOOL SetItemData(HTREEITEM hItem,DWORD_PTR dwData);&&&&&& 为树形控件中某个指定节点设置附加的32位数据。参数hItem同上,dwData为要设置的32位数据。&&&&&& CString GetItemText(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的标签文本。参数hItem同上。返回值是包含标签文本的字符串。&&&&&& BOOL SetItemText(HTREEITEM hItem,LPCTSTR lpszItem);&&&&&& 为树形控件中某个指定节点设置标签文本。参数hItem同上,lpszItem为包含标签文本的字符串的指针。&&&&&& HTREEITEM GetNextSiblingItem(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的下一个兄弟节点。参数hItem同上。返回值是下一个兄弟节点的句柄。&&&&&& HTREEITEM GetPrevSiblingItem(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的上一个兄弟节点。参数hItem同上。返回值是上一个兄弟节点的句柄。&&&&&& HTREEITEM GetParentItem(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的父节点。参数hItem同上。返回值是父节点的句柄。&&&&&& HTREEITEM GetRootItem( )&&&&&& 获取树形控件根节点的句柄。&&&&&& HTREEITEM GetSelectedItem( )&&&&&& 获取树形控件当前选中节点的句柄。&&&&&& BOOL DeleteAllItems( );&&&&&& 删除树形控件中的所有节点。删除成功则返回TRUE,否则返回FALSE。&&&&&& BOOL DeleteItem(HTREEITEM hItem);&&&&&& 删除树形控件中的某个节点。参数hItem为要删除的节点的句柄。删除成功则返回TRUE,否则返回FALSE。&&&&&& HTREEITEM InsertItem(LPCTSTR lpszItem,int nImage,int nSelectedImage,HTREEITEM hParent = TVI_ROOT,HTREEITEM hInsertAfter = TVI_LAST);&&&&&& 在树形控件中插入一个新节点。参数lpszItem为新节点的标签文本字符串的指针,参数nImage为新节点的图标在树形控件图像序列中的索引,参数nSelectedImage为新节点被选中时的图标在图像序列中的索引,参数hParent为插入节点的父节点的句柄,参数hInsertAfter为新节点的前一个节点的句柄,即新节点将被插入到hInsertAfter节点之后。&&&&&& BOOL SelectItem(HTREEITEM hItem);&&&&&& 选中指定的树节点。参数hItem为要选择的节点的句柄。若成功则返回TRUE,否则返回FALSE。&&&&&& 树形控件的应用实例&&&&&&&最后鸡啄米还是给大家写一个简单的实例,说明CListCtrl类的几个成员函数及树形控件通知消息等的使用方法。&&&&&& 此实例实现的功能:在一个树形控件中显示鸡啄米网站的简单结构分层,共有三层,分别为鸡啄米网站、各个分类和文章。用鼠标左键单击改变选中节点后,将选中节点的文本显示到中。另外,还要实现一个常见的效果,就是鼠标划过除根节点外的某个树节点时,显示相应的Tip提示信息。下面是具体实现步骤:&&&&&& 1. 创建一个基于对话框的MFC工程,名称设置为&Example31&。&&&&&& 2. 在自动生成的对话框模板IDD_EXAMPLE31_DIALOG中,删除&TODO: Place dialog controls here.&、&OK&按钮和&Cancel&按钮。添加一个Tree Control控件,ID设置为IDC_WEB_TREE,属性Has Buttons、Has Lines和Lines At Root都设为True,为了在鼠标划过某个节点时显示提示信息还需要将Info Tip属性设为True。再添加一个静态文本框和一个编辑框,静态文本框的Caption属性设为&您选择的节点:&,编辑框的ID设为IDC_ITEM_SEL_EDIT,Read Only属性设为True。此时的对话框模板如下图:&&&&&& 3. 导入需要为树形控件的节点添加的图标。鸡啄米在这里找了三个32x32的Icon图标,保存到工程的res目录下。然后在Resource View资源视图中,右键点击Icon节点,在右键菜单中选择&Add Resource...&,弹出&Add Resource&对话框,再从左边&Resource type&列表中选择&Icon&,点击右边的&Import...&按钮,就可以选择三个图标文件进行导入了。导入成功后,分别修改它们ID为IDI_WEB_ICON、IDI_CATALOG_ICON和IDI_ARTICLE_ICON。&&&&&& 4. 为树形控件IDC_WEB_TREE添加CTreeCtrl类型的控件变量m_webTree。并在Example31Dlg.h文件中为CExample31Dlg类添加成员对象:CImageList m_imageL。&&&&&& 5. 在对话框初始化时,我们在树形控件中添加鸡啄米网站的树形结构,那么需要修改CExample31Dlg::OnInitDialog()函数为:
BOOL&CExample31Dlg::OnInitDialog() &&
&&&&CDialogEx::OnInitDialog(); &&
&&&&&&&&&......略 &&
&&&&HICON&hIcon[3];&&&&&&&&
&&&&HTREEITEM&hR&&&&&&&
&&&&HTREEITEM&hCataI&&&
&&&&HTREEITEM&hArtI&&&&
&&&&hIcon[0]&=&theApp.LoadIcon(IDI_WEB_ICON); &&
&&&&hIcon[1]&=&theApp.LoadIcon(IDI_CATALOG_ICON); &&
&&&&hIcon[2]&=&theApp.LoadIcon(IDI_ARTICLE_ICON); &&
&&&&m_imageList.Create(32,&32,&ILC_COLOR32,&3,&3); &&
&&&&for&(int&i=0;&i&3;&i++) &&
&&&&&&&&m_imageList.Add(hIcon[i]); &&
&&&&m_webTree.SetImageList(&m_imageList,&TVSIL_NORMAL); &&
&&&&hRoot&=&m_webTree.InsertItem(_T(&鸡啄米&),&0,&0); &&
&&&&hCataItem&=&m_webTree.InsertItem(_T(&IT互联网&),&1,&1,&hRoot,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hCataItem,&1); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&百度文章1&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&2); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&谷歌文章2&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&3); &&
&&&&hCataItem&=&m_webTree.InsertItem(_T(&数码生活&),&1,&1,&hRoot,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hCataItem,&4); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&智能手机文章1&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&5); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&平板电脑文章2&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&6); &&
&&&&hCataItem&=&m_webTree.InsertItem(_T(&软件开发&),&1,&1,&hRoot,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hCataItem,&7); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&C++编程入门系列1&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&8); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&VS2010/MFC编程入门2&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&9); &&
&&&&hCataItem&=&m_webTree.InsertItem(_T(&娱乐休闲&),&1,&1,&hRoot,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hCataItem,&10); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&玛雅文明文章1&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&11); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&IT笑话2&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&12); &&
&&&&return&TRUE;&&&&
}&&&&&&&& 6. 我们希望在选中节点改变时,将最新的选择项实时显示到编辑框中,那么可以响应TVN_SELCHANGED通知消息。为树形控件IDC_WEB_TREE的通知消息TVN_SELCHANGEDCExample31Dlg::OnTvnSelchangedWebTree,并修改函数体如下:
void&CExample31Dlg::OnTvnSelchangedWebTree(NMHDR&*pNMHDR,&LRESULT&*pResult) &&
&&&&LPNMTREEVIEW&pNMTreeView&=&reinterpret_cast&LPNMTREEVIEW&(pNMHDR); &&
&&&&*pResult&=&0; &&
&&&&CString&strT&&&
&&&&HTREEITEM&hItem&=&m_webTree.GetSelectedItem(); &&
&&&&strText&=&m_webTree.GetItemText(hItem); &&
&&&&SetDlgItemText(IDC_ITEM_SEL_EDIT,&strText); &&
}&&&&&&&& 7. 还有一个功能需要实现,那就是鼠标划过除根节点外的某个树节点时,显示相应的Tip提示信息,本实例中提示信息为节点的编号。这需要响应TVN_GETINFOTIP通知消息。为树形控件IDC_WEB_TREE的通知消息TVN_GETINFOTIP添加消息处理函数CExample31Dlg::OnTvnGetInfoTipWebTree,并修改函数体如下:
void&CExample31Dlg::OnTvnGetInfoTipWebTree(NMHDR&*pNMHDR,&LRESULT&*pResult) &&
&&&&LPNMTVGETINFOTIP&pGetInfoTip&=&reinterpret_cast&LPNMTVGETINFOTIP&(pNMHDR); &&
&&&&*pResult&=&0; &&
&&&&NMTVGETINFOTIP*&pTVTipInfo&=&(NMTVGETINFOTIP*)pNMHDR;&&&&&
&&&&HTREEITEM&hRoot&=&m_webTree.GetRootItem();&&&&&&&&
&&&&CString&strT&&&&&&&
&&&&if&(pTVTipInfo-&hItem&==&hRoot) &&
&&&&&&&&&&
&&&&&&&&strText&=&_T(&&); &&
&&&&else&&
&&&&&&&&&&
&&&&&&&&strText.Format(_T(&%d&),&pTVTipInfo-&lParam); &&
&&&&wcscpy(pTVTipInfo-&pszText,&strText); &&
}&&&&&&&& 8. 运行程序,弹出结果对话框。效果如下图:&&&&&&&树形控件的知识就讲到这里了,相比之前的控件可能稍有复杂。不过用的多了,就会觉得得心应手了。鸡啄米欢迎大家继续关注后面的VS2010/MFC编程入门教程。
除非特别注明,文章均为原创
转载请标明本文地址:
作者:鸡啄米
&&( 20:22:53)&&( 20:35:57)&&( 21:47:5)&&( 22:36:38)&&( 21:53:33)&&( 0:49:15)&&( 23:21:17)&&( 21:47:59)&&( 0:24:18)&&( 0:15:31)
内容详细,已经做了一遍,呵呵,非常感谢!期待后面的课程鸡啄米 于
23:12:47 回复嗯,做实例印象更深刻,而且理解也更到位
代码可真的是太多了,真的不太好弄。先收着了,谢谢博主分享!
编程不会啊
学习了,期待后面的课程
好多代码,我凌乱了
请教一下,第一段代码里第18行的m_imageList是在哪里创建的? 鸡啄米 于
22:10:26 回复这个好像是我忘记讲了,是在Example31Dlg.h文件中定义的。实例的第4步中我已经做了补充说明。谢谢你的细心和反馈。
第7步中“wcscpy(pTVTipInfo-&pszText, strText);“ 在vs2012下提示错误(有安全隐患), 我改成 ”wcscpy_s(pTVTipInfo-&pszText, 32, strText);“后编译通过,望解答。鸡啄米 于
23:09:34 回复提示的是警告,可以运行的。wcscpy_s是wcscpy的安全版本。keke2014 于
14:40:24 回复谢谢老师解答,不过的确是error,不是warning,然后我根据提示在“预处理器定义”里加入_CRT_SECURE_NO_WARNINGS后才ok
提示的内容,怎么显示在鼠标的右边呢.
您好,米哥,我想取消子节点与父节点的缩进,请问应该如何做啊!谢谢啊!鸡啄米 于
23:29:24 回复mfc的树控件应该不行,你要是必须要那种效果的,可以自己用List Control实现,就是麻烦点
你好:初始化时下面的这段代码是什么意思?麻烦详细解释一下其中Creat函数的各个参数;还有就是句柄的创建(声明)
谢谢!!!!
// 创建图像序列CImageList对象
m_imageList.Create(32, 32, ILC_COLOR32, 3, 3);
您好,我完全是按照上面的例子进行的,但是最后一段程序好像没有任何作用。程序运行没有问题,但是鼠标滑过节点的时候没有提示信息显示,请问可能是什么原因呢?谢谢。鸡啄米 于
23:36:40 回复树控件的Info Tip属性需要设置为true
虽然没有自己敲完这些代码,但感觉还是学习到了
不过希望楼主能够提供MFC与数据库关联的小程序
我随便找了三个32*32的PNG图标,没有加载上去,请问一下这是什么问题呢?nianhuadefo 于
13:52:13 回复不同格式的图,加载上有区别的吧?bmp图 用LoadBitMap
Error 1 error C2664: 'wcscpy_s' : cannot convert parameter 1 from 'LPSTR' to 'wchar_t *' d:\projects\example31\example31dlg.cpp 279 1 Example31请问楼主,这种问题怎么解决呢?考拉 于
10:33:46 回复wcscpy和wcscpy_s是宽字符版本(Unicode),应该是你创建工程的时候没有选用Unicode库,可以把wcscpy(pTVTipInfo-&pszText, strText)改成strcpy(pTVTipInfo-&pszText,
strText);继续在米哥在学习,支持米哥!
它运行时说m_imageList是未被定义的。。。
error C2065: 'theApp' : undeclared identifier 怎么办?QING 于
18:41:36 回复使用AfxGetApp()
获得theApp指针。。。// 加载三个图标,并将它们的句柄保存到数组
hIcon[0] = AfxGetApp()-&LoadIcon(IDI_WEB_ICON);
hIcon[1] = AfxGetApp()-&LoadIcon(IDI_CATALOG_ICON);
hIcon[2] = AfxGetApp()-&LoadIcon(IDI_ARTICLE_ICON);
忽然间找到了学习的方向。。。谢谢你的无私奉献
您好,米哥,我创建的是有数据库支持的多文档MFC程序,用它默认的那个对话框IDD_工程名_FORM,然后自己添加的对话框类,按照这个方法编程之后树控件显示不出来,请问是怎么回事啊?求解答
不知道诸位时候遇到这样的问题,想要加载的图像显示不出来,我选用的图像格式为.png格式的图片不知道是不是图片格式的问题。另外,我还遇到了另外一个问题:当鼠标划过树节点时并没有触发TVN_GETINFOTIP事件,这令我非常费解,我在那段代码上设置断点,结果什么反应都没。不知道大家遇到过类似的问题吗?CiCi 于
21:06:53 回复经过一天的努力终于找到问题的根源,下面我简单解释一下问题的根源:在MFC资源视图中我们可以发现很多文件夹,这些文件夹实际上是有一些学问的。这里我只对icon文件夹进行论述,icon文件添加的图片资源后缀名.ico(Pay Attention)其实资源ID在这里起到很大的提示作用,icon文件夹内部资源的默认ID的前缀为IDI----ID代表资源编号,I则代表icon即.ico类型文件。引入图标文件类型为.ico就完事OK了
昨天我提到&当鼠标划过树节点时并没有触发TVN_GETINFOTIP事件&这个问题,现在我纠正一下,博主所写的办法完全正确,问题是:我忘记将Tip Info属性设置为true了,那这条属性的含义应为:是否显示提示信息。在此,我对于昨天的问题进行纠正。
谢谢您的无私奉献,我跟着您的教材到这了,有个疑问,就是这个例子如何加上滚动条控件Scroll Bar(因为下拉现实不全)虽然那个例子跟着做了,但是想加在这里,没思维了。
米哥,我按照你描述的步骤做了,能运行出来,不过不知道为什么,我的图标看不见;physu 于
16:04:53 回复首先,非常感谢鸡啄米先生,你是我们共同的老师!谢谢你!wcscpy报错的问题,按照上面那位同学的改法就可以运行。而图片没出来的,可能是你加载的图片格式有问题,放到res文件夹里的图片格式应该是.ico格式的图片,其实也是位图的一种。我一开始用的.png格式的图片,搞了半天,结果不行。
如果想要点击树形图的一个选项 在然后点击不同按钮对其进行不同操作
要怎么做?
m_imageList.Create(32, 32, ILC_COLOR32, 3, 3)// 创建图像序列CImageList对象 求解这句话怎么理解
完全随机文章VB treeview 控件的子控件问题 运行添加子节点后,treeview控件不显示子结点,怎么回事???_百度知道
VB treeview 控件的子控件问题 运行添加子节点后,treeview控件不显示子结点,怎么回事???
jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http.hiphotos.baidu://a.com/zhidao/wh%3D600%2C800/sign=d971f06bacb990dc24c2/43a7d933c895d143ddd6aaaaf0734.hiphotos.baidu://a.jpg" esrc="/zhidao/wh%3D450%2C600/sign=e112dbbf08fa513d51ff64da085d79cd/43a7d933c895d143ddd6aaaaf0734<a href="/zhidao/pic/item/43a7d933c895d143ddd6aaaaf0734://a.hiphotos
提问者采纳
最好能把你这段的代码贴出来你要检查你添加的时候是否 Key 没对应等等的问题。
其他类似问题
按默认排序
其他2条回答
使子节点得以展开。或者在Form 的 Load 事件中加入 TreeView1.LineStyle = tvwRootLines这样就可以通过点击节点前的图标来展开或者收缩子节点如果添加子节点没有错误的话,你可以尝试双击父节点
te Enum ObjectType
otNone = 0
otFactory = 1
otGroup = 2
otPerson = 3
otFactory2 = 4
otGroup2 = 5
otPerson2 = 6End EnumPrivate SourceNode As ObjectPrivate SourceType As ObjectTypePrivate TargetNode As Object&#39; A list of EmployeeProjects each person has worked on.Private Projects As New Collection&#39; Save information about these projects for this&#39; employee.Private Sub AddProjects(emp_name As String, ParamArray proj_names() As Variant)Dim emp_proj As New EmployeeProjectsDim i As Integer
&#39; Add the project names to the EmplyeeProjects
&#39; object for this employee.
For i = LBound(proj_names) To UBound(proj_names)
emp_proj.ProjectNames.Add proj_names(i)
&#39; Add emp_proj to the collection of EmployeeProjects.
Projects.Add emp_proj, emp_nameEnd Sub&#39; ***********************************************&#39; Return the node&#39;s object type.&#39; ***********************************************Private Function NodeType(test_node As Node) As ObjectType
Select Case Left$(test_node.Key, 1)
NodeType = otFactory
NodeType = otGroup
NodeType = otPerson
End SelectEnd Function&#39; ***********************************************&#39; Prepare the ImageList and TreeView controls.&#39; ***********************************************Private Sub Form_Load()Dim i As IntegerDim factory As NodeDim group As NodeDim person As Node
&#39; Load pictures into the ImageList.
For i = 1 To 6
TreeImages.ListImages.Add , , TreeImage(i).Picture
&#39; Attach the TreeView to the ImageList.
OrgTree.ImageList = TreeImages
&#39; Create some nodes.
Set factory = OrgTree.Nodes.Add(, , &f R & D&, &R & D&, otFactory, otFactory2)
Set group = OrgTree.Nodes.Add(factory, tvwChild, &g Engineering&, &Engineering&, otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Cameron, Charlie&, &Cameron, Charlie&, otPerson, otPerson2)
AddProjects &p Cameron, Charlie&, &Alpha&, &Beta&
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Davos, Debbie&, &Davos, Debbie&, otPerson, otPerson2)
AddProjects &p Davos, Debbie&, &Beta&, &Delta&, &Epsilon&
person.EnsureVisible
Set group = OrgTree.Nodes.Add(factory, tvwChild, &g Test&, &Test&, otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Able, Andy&, &Andy, Able&, otPerson, otPerson2)
AddProjects &p Able, Andy&, &Phi&
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Baker, Betty&, &Baker, Betty&, otPerson, otPerson2)
AddProjects &p Baker, Betty&, &Alpha&, &Zeta&
person.EnsureVisible
Set factory = OrgTree.Nodes.Add(, , &f Sales & Support&, &Sales & Support&, otFactory, otFactory2)
Set group = OrgTree.Nodes.Add(factory, tvwChild, &g Showroom Sales&, &Showroom Sales&, otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Gaines, Gina&, &Gaines, Gina&, otPerson, otPerson2)
AddProjects &p Gaines, Gina&, &Pi&, &Rho&
person.EnsureVisible
Set group = OrgTree.Nodes.Add(factory, tvwChild, &g Field Service&, &Field Service&, otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Helms, Harry&, &Helms, Harry&, otPerson, otPerson2)
AddProjects &p Helms, Harry&
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Ives, Irma&, &Ives, Irma&, otPerson, otPerson2)
AddProjects &p Ives, Irma&, &Alpha&, &Beta&, &Gamma&, &Delta&, &Epsilon&, &Omega&
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Jackson, Josh&, &Jackson, Josh&, otPerson, otPerson2)
AddProjects &p Jackson, Josh&, &Pi&
person.EnsureVisible
Set group = OrgTree.Nodes.Add(factory, tvwChild, &g Customer Support&, &Customer Support&, otGroup, otGroup2)
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Klug, Karl&, &Klug, Karl&, otPerson, otPerson2)
AddProjects &p Klug, Karl&, &Fee&, &Fie&, &Foe&, &Fum&
Set person = OrgTree.Nodes.Add(group, tvwChild, &p Landau, Linda&, &Landau, Linda&, otPerson, otPerson2)
AddProjects &p Landau, Linda&, &Zeta&, &Eta&, &Nu&
person.EnsureVisible
&#39; Associate the ImageLists with the
&#39; ListView&#39;s Icons and SmallIcons properties.
lvProjects.Icons = imgLarge
lvProjects.SmallIcons = imgSmall
&#39; Start with small icon view.
mnuSetView_Click lvwSmallIconEnd Sub&#39; ***********************************************&#39; Make the TreeView as large as possible.&#39; ***********************************************Private Sub Form_Resize()
OrgTree.Move 0, 0, ScaleWidth / 2, ScaleHeight
lvProjects.Move ScaleWidth / 2, 0, ScaleWidth, ScaleHeightEnd SubPrivate Sub mnuSetView_Click(Index As Integer)Dim i As Integer
&#39; Display the selected view style.
lvProjects.View = Index
&#39; Check this menu item.
For i = 0 To 3
If i = Index Then
mnuSetView(i).Checked = True
mnuSetView(i).Checked = False
Next iEnd Sub&#39; Display the data for this node in the ListView.Private Sub OrgTree_Click()Dim emp_proj As EmployeeProjectsDim column_header As ColumnHeaderDim list_item As ListItemDim obj As ObjectDim i As Integer
&#39; Clear the ListView.
lvProjects.ListItems.Clear
lvProjects.ColumnHeaders.Clear
&#39; Get the employee&#39;s EmployeeProjects object.
If SourceNode Is Nothing Then Exit Sub
On Error GoTo NoProjects
Set emp_proj = Projects(SourceNode.Key)
On Error GoTo 0
&#39; Fill in the ListView.
&#39; Create the column header.
Set column_header = lvProjects. _
ColumnHeaders.Add(, , &Project&, _
2 * TextWidth(&Project&))
With emp_proj.ProjectNames
For i = 1 To .Count
Set list_item = lvProjects.ListItems.Add(, , .Item(i))
list_item.Icon = 1
list_item.SmallIcon = 1
NoProjects:
Exit SubEnd Sub&#39; ***********************************************&#39; Save the node pressed so we can drag it later.&#39; ***********************************************Private Sub OrgTree_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Set SourceNode = OrgTree.HitTest(x, y)End Sub&#39; ***********************************************&#39; Start a drag if one is not in progress.&#39; ***********************************************Private Sub OrgTree_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = vbLeftButton Then
&#39; Start a new drag. Note that we do not get
&#39; other MouseMove events while the drag is
&#39; in progress.
&#39; See what node we are dragging.
SourceType = NodeType(SourceNode)
&#39; Select this node. When no node is highlighted,
&#39; this node will be displayed as selected. That
&#39; shows where it will land if dropped.
Set OrgTree.SelectedItem = SourceNode
&#39; Set the drag icon for this source.
OrgTree.DragIcon = IconImage(SourceType)
OrgTree.Drag vbBeginDrag
End IfEnd Sub&#39; ***********************************************&#39; The user is dropping. See if the drop is valid.&#39; ***********************************************Private Sub OrgTree_DragDrop(Source As Control, x As Single, y As Single)
If Not (OrgTree.DropHighlight Is Nothing) Then
&#39; It&#39;s a valid drop. Set source node&#39;s
&#39; parent to be the target node.
Set SourceNode.Parent = OrgTree.DropHighlight
Set OrgTree.DropHighlight = Nothing
Set SourceNode = Nothing
SourceType = otNoneEnd Sub&#39; ***********************************************&#39; The mouse is being dragged over the control.&#39; Highlight the appropriate node.&#39; ***********************************************Private Sub OrgTree_DragOver(Source As Control, x As Single, y As Single, State As Integer)Dim target As NodeDim highlight As Boolean
&#39; See what node we&#39;re above.
Set target = OrgTree.HitTest(x, y)
&#39; If it&#39;s the same as last time, do nothing.
If target Is TargetNode Then Exit Sub
Set TargetNode = target
highlight = False
If Not (TargetNode Is Nothing) Then
&#39; See what kind of node were above.
If NodeType(TargetNode) + 1 = SourceType Then _
highlight = True
If highlight Then
Set OrgTree.DropHighlight = TargetNode
Set OrgTree.DropHighlight = Nothing
End IfEnd Sub
treeview控件的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 easyui tree添加节点 的文章

 

随机推荐