(WinForm)我想实现:点击某个结点时,如果该结点是折叠的就展开,如果该结点是展开的就折叠。请问该怎么实现?刚才开始学,我最初是用一个bool类型的值来判断的,但这样有很大的缺陷,效果不好,请高手指点。

解决方案 »

  1.   


    private void button1_Click(object sender, System.EventArgs e)
    {
       if (treeView1.SelectedNode.IsExpanded)
       {
          treeView1.SelectedNode.Collapse();
          MessageBox.Show(treeView1.SelectedNode.Text + 
            " tree node collapsed.");
       }
       else
       {
          treeView1.SelectedNode.Expand();
          MessageBox.Show(treeView1.SelectedNode.Text + 
            " tree node expanded.");
       }
    }
      

  2.   

    IsExpanded  获取一个值,用以指示树节点是否处于可展开状态 
    -- ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/CPref17/html/T_System_Windows_Forms_TreeNode_Members.htm
      

  3.   

    好像不行哦,会提示:“未将对象引用设置到对象的实例”。我是在treeView 的NodeMouseClick 事件下写的代码。
      

  4.   

    设置节点的SelectAction属性为Expand就能实现该节点的折叠或是展开,如果要是判断节点的折叠打开状态可以检查节点的Expanded属性true为展开,反之折叠;要处理事件的话在treeview的select事件里处理,点击节点之后处理用AfterSelect事件,点击节点之前用BeforeSelect事件
      

  5.   

    private void button1_Click(object sender, System.EventArgs e)
    {
       if (treeView1.SelectedNode.IsExpanded)
       {
          treeView1.SelectedNode.Collapse();
          MessageBox.Show(treeView1.SelectedNode.Text + 
            " tree node collapsed.");
       }
       else
       {
          treeView1.SelectedNode.Expand();
          MessageBox.Show(treeView1.SelectedNode.Text + 
            " tree node expanded.");
       }
    }
      

  6.   

    jiatong1981 所提供的方法是能够实现了我想要的功能了,但是有一个问题就是:当我点下节点后,该节点展开了,(这个时候该节点就突出显示了)如果我再接着点该节点,它就不能折叠起来了,只有当我点到别的节点上(展开的节点失去了突出显示)再点回刚才展开的节点才起作用,请问这个问题又怎么解决?
      

  7.   

     
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                if (treeView1.SelectedNode.IsExpanded)
                {
                    treeView1.SelectedNode.Collapse();            }
                else
                {
                    treeView1.SelectedNode.Expand();
                }        }        private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
            {
                this.treeView1.SelectedNode = null;
            }        private void treeView1_AfterCollapse(object sender, TreeViewEventArgs e)
            {
                this.treeView1.SelectedNode = null;
            }
      

  8.   


     private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                if (treeView1.SelectedNode.IsExpanded)
                {
                    treeView1.SelectedNode.Collapse();
                    this.treeView1.SelectedNode = null;
                }
                else
                {
                    treeView1.SelectedNode.Expand();
                    this.treeView1.SelectedNode = null;
                }        }
      

  9.   

    主要是事件的问题,当你再次选择同一个节点时AfterSelect事件不会被触发,
    更符合逻辑的办法是使用MouseClick事件,然后使用TreeView的GetNodeAt函数来获取
    鼠标下的树节点,再判断其是否展开等逻辑
      

  10.   

    如果是用.net2005,可以用如下方法
    protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {    …………………//此处为执行代码
            //应注意的是,这个代码一定要写在最下面,如果写到前面了,可能有些操作会被取消,因为它装选择的结点置空了。
            if (TreeView1.SelectedNode.Expanded == true)
            {
                TreeView1.SelectedNode.Collapse();
                TreeView1.SelectedNode.Selected = false;
            }
            else
            {
                TreeView1.SelectedNode.Expand();
                TreeView1.SelectedNode.Selected = false;
            }
        }