其实TreeView是datagird的变版
是datagird的cell的大小设置得很小它内部是如何计算(或获取)鼠标所在位置的TreeNode的?
你在点击某一个节点时,其实你的光标坐标是对应在某一个很小的单元格TreeView是通过什么方式将所有的TreeNode显示出来的?
在datagird的cell中加入信息加在某一行就好
然后判断 是否缩进(子节点和父节点的位置差异)

解决方案 »

  1.   

    1. TreeView1.SelectTreeNode
    2. TreeNode可以静态加入,也可以动态填充,选择的TreeNode通过它的编号处理
      

  2.   

    内部的实现机制你可以用reflector查看代码,有点复杂
      

  3.   

    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); 
    } =================================================对树节点的右键菜单的添加,里面就有如何根据鼠标位置,判断节点的