RT

解决方案 »

  1.   

    似乎不可以,除非你搞一个变量(数组或List)记住它隐藏:先把要隐藏的节点保存到一个变量里,并记住它父节点,然后从treeview上删除这个节点
    显示:显示时,读这个变量,把根据节点的父节点把它们一一还原回来
      

  2.   

    不是哥们儿固执,是需求就是这样的,不允许删除的…如果删除就能解决问题我就不需要发帖问了…
    目前我的想法是:
    重写TreeView控件,重写子节点,当禁用某节点时设置前景色变成禁用灰,不允许选中,可是不知道怎么重写……
    希望高手提供思路
      

  3.   

    不用重写也可以,你把禁用的节点ForeColor设成灰色的
    然后在TreeView的BeforeSelect, BeforeCheck事件里根据节点颜色判断,如果是灰色的,则不让用户选中该节点 private void button1_Click(object sender, EventArgs e)
            {
                //禁用第一个节点
                treeView1.Nodes[0].ForeColor = SystemColors.Control;        
     }        private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
            {
                if (e.Node != null)
                {
                    if (e.Node.ForeColor == SystemColors.Control)
                    {
                        e.Cancel = true;  //不让选中禁用节点
                    }
                }
            }        private void treeView1_BeforeCheck(object sender, TreeViewCancelEventArgs e)
            {
                if (e.Node != null)
                {
                    if (e.Node.ForeColor == SystemColors.Control)
                    {
                        e.Cancel = true; //不让选中禁用节点                }
                }
            }
      

  4.   

    恢复禁用时,在把颜色改回来
    treeView1.Nodes[0].ForeColor = SystemColors.WindowText; 
      

  5.   

    为了禁用效果更好点,在禁用时加个判断
                 //禁用第一个节点
                 treeView1.Nodes[0].ForeColor = SystemColors.Control;
                if (treeView1.SelectedNode == treeView1.Nodes[0])
                {
                    treeView1.SelectedNode = null;
                }