您的位置:程序门 -> .net技术 -> c#



讨论一下:关于treeview


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


讨论一下:关于treeview
发表于:2007-03-28 12:24:53 楼主
1.我鼠标点中一个treenode的时候,这个treenode就能被选中,它内部是如何计算(或获取)鼠标所在位置的treenode的?

2.treeview是通过什么方式将所有的treenode显示出来的阿?而且对treenode都能得到他的bounds,它内部到底是怎么做的阿?
发表于:2007-03-28 12:41:261楼 得分:0
从不用asp.net自带的控件,帮顶。
发表于:2007-03-28 12:44:082楼 得分:0
其实treeview是datagird的变版
是datagird的cell的大小设置得很小

它内部是如何计算(或获取)鼠标所在位置的treenode的?
你在点击某一个节点时,其实你的光标坐标是对应在某一个很小的单元格

treeview是通过什么方式将所有的treenode显示出来的?
在datagird的cell中加入信息加在某一行就好
然后判断   是否缩进(子节点和父节点的位置差异)
发表于:2007-03-28 13:29:233楼 得分:0
1.   treeview1.selecttreenode
2.   treenode可以静态加入,也可以动态填充,选择的treenode通过它的编号处理
发表于:2007-03-28 13:33:224楼 得分:0
内部的实现机制你可以用reflector查看代码,有点复杂
发表于:2007-03-28 13:42:435楼 得分:0
private   void   filetree_mouseup(object   sender,   system.windows.forms.mouseeventargs   e)
{
//       添加树的右键菜单
if(e.button     ==   mousebuttons.right)      
{      
point   clickpoint   =   new   point(e.x,e.y);      
//获取当前点击的节点
treenode   currentnode   =   filetree.getnodeat(clickpoint);      
if(currentnode   ==   null)      
return;  
else
{
//给节点临时保存变量赋值
_nodetemp   =   currentnode;
if   (_nodetemp.parent   ==   null)
{
return;
}
}
//       convert       from       tree       coordinates       to       screen      
point       screenpoint       =       filetree.pointtoscreen(clickpoint);      
//       convert       from       screen       to       form      
point       formpoint       =       this.pointtoclient(screenpoint);      
//       showing       the       context       menu          
//       in       add       use       an       overloaded       that       adds       an       eventhandler       or       anything       else          
contextmenu       menu       =       new       contextmenu();      
menu.menuitems.clear();
menu.menuitems.add( "添加子文件夹 ");      
menu.menuitems[0].click       +=       new       eventhandler(addfolder_click);      
menu.menuitems.add( "删除文件夹 ");      
menu.menuitems[1].click       +=       new       eventhandler(delfolder_click);
menu.menuitems.add( "重命名 ");      
menu.menuitems[2].click       +=       new       eventhandler(renamefolder_click);  
menu.menuitems.add( "- ");      
menu.menuitems.add( "添加文件 ");      
menu.menuitems[4].click       +=       new       eventhandler(addfiles_click);

menu.show(this,formpoint);  
}  

=================================================

对树节点的右键菜单的添加,里面就有如何根据鼠标位置,判断节点的


快速检索

最新资讯
热门点击