供参考
http://expert.csdn.net/Expert/topic/1254/1254696.xml?temp=.6841394
http://www.c-sharpcorner.com/Code/2002/Mar/IntroTreeViewTA.asp

解决方案 »

  1.   

    1.我试过,没有你说的问题,
    我在这个事件触发标签修改
    private void treeView1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
    treeView1.SelectedNode.BeginEdit();
    }private void treeView1_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
    {
    MessageBox.Show(e.Node.Text);
    }
    .
    2.你可以捕抓鼠标单击的位置是否存在在NODE,然后进行相应的操作.
      

  2.   

    嗯,参考楼上的两个例子,发现我的程序和你们所提供的区别:我的程序里,对treeview的onMouseDown事件进行了定义,即显示右键菜单,如果我去掉这一项,就不会出现点空白区域的时候焦点转移.在这个事件中,我发现这一句导致问题出现:
    tvCatelog.SelectedNode=tvCatelog.GetNodeAt(e.X,e.Y);
    这段程序的本意是点右键的时候也会选择一个子点,treeview缺省的是不会将焦点转移到右键所点击的子点的,有没有更好的解决方法呢?
    thx.
      

  3.   

    OK,事情已经解决,我把MouseDown事件改为这样:
    if(e.Button==MouseButtons.Right)
    {
    if(tvCatelog.GetNodeAt(e.X,e.Y)!=null)
    { tvCatelog.SelectedNode=tvCatelog.GetNodeAt(e.X,e.Y);
    cmCatelogTV.Show(this,new Point(e.X,e.Y));
    }
    }