TreeView控件默认会选中第一项--只要TreeView控件获得焦点(不论是否点击的是其中节点,还是空白处),都会有节点被选中。
我希望点击TreeView控件的空白处时,不要选中第一项,请问各位如何实现啊??

解决方案 »

  1.   

     private void treeView1_MouseUp(object sender, MouseEventArgs e)
            {
                TreeNode selectnode = this.treeView1.GetNodeAt(e.Location);
                if (selectnode == null)
                {
                    this.treeView1.SelectedNode = null;
                   
                }
            }
      

  2.   

    楼上的,不行。真怀疑你有没有试过。跟踪代码发现:
    如果点击的是treeview的空白处MouseUp后,SelectedNode是null了,
    但一跳出MouseUp事件,SelectedNode马上就恢复为第一项了。
      

  3.   

    肯定是与treeview默认选择第一项有关--只要treeview得到焦点就会选中第一项。
      

  4.   

    我试了,没问题.不过一但treeview获取焦点,第一个还是会选中的.
      private void treeView1_MouseUp(object sender, MouseEventArgs e)
            {
                
                TreeNode selectnode = this.treeView1.GetNodeAt(e.Location);
                if (selectnode == null)
                {
                    this.treeView1.SelectedNode = null;            }          }        private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
            {
                if (e.Action == TreeViewAction.Unknown)
                    e.Cancel = true;
            }再加一个事件.我试了,可以了.获取焦点后如果原来没有选中则仍没选中.
    如果在LZ处仍有问题,检查是否有什么事件冲突了.
    另: 我这是Form的
      

  5.   

    这样是可以了,真太感谢楼上朋友了,已经困扰我很长时间了!相在带来了另一个小小的问题就是,我本来在AfterSelect事件里有根据点击的节点,显示相应的内容的代码,如果什么节点也没点击,就清空那些内容。现在,如果点空白处AfterSelect就不执行了,这样之前显示的内容不能清空!有好办法解决吗
      

  6.   

     private void treeView1_MouseUp(object sender, MouseEventArgs e)
            {
                
                TreeNode selectnode = this.treeView1.GetNodeAt(e.Location);
                if (selectnode == null)
                {
                    this.treeView1.SelectedNode = null;
                    //清空内容.            }          }
      

  7.   

    给你两个思路吧
    1、重写treeview代码,就是自定义一个treeview控件,或者从treeview继承一下,修改里面的代码,难度有点高
    2、你多添加一个空白的节点,不想选择其他的时候,可以让这个空白的节点获得焦点啊,空白的节点,就是没有显示内容的焦点,就是text=“”的焦点,没有试过,LZ可以尝试一下
      

  8.   

    感谢各位朋友的帮忙我改善了下,不知道会不会有别的问题出现,分享留待观察        bool CancelfterEvent = false;
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                //设置显示
                this.label1.Text = this.treeView1.SelectedNode.Text;
            }        private void treeView1_MouseDown(object sender, MouseEventArgs e)
            {
                if (treeView1.GetNodeAt(e.Location) == null)
                {
                    CancelfterEvent = true;
                    //清除显示
                    this.label1.Text = "";
                }
                else
                    CancelfterEvent = false;
                this.treeView1.SelectedNode = treeView1.GetNodeAt(e.Location);
            }        private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
            {
                e.Cancel = CancelfterEvent;
            }
      

  9.   

    http://www.soasp.net/FilePage/200803/20080303214457.aspx
    编程技术资源网为您提供技术支持!
      

  10.   

    有了.
    if(TreeView1.SelectedNode!=null)
        TreeView1.SelectedNode.SelectAction = TreeNodeSelectAction.None;