Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在TreeNode编辑器中禁用或灰显节点_C#_Visual Studio_Treeview_Visibility - Fatal编程技术网

C# 在TreeNode编辑器中禁用或灰显节点

C# 在TreeNode编辑器中禁用或灰显节点,c#,visual-studio,treeview,visibility,C#,Visual Studio,Treeview,Visibility,如何禁用特定节点,以便用户无法选择它。为用户隐藏它也是有效的 我尝试了Visible属性,但它隐藏了整个树(所有节点)。我只想禁用/隐藏几个节点 C#使用Visual Studio 2005 TreeNode编辑器。两个选项: 动态添加和删除节点 所有者绘制并处理单击并将其发送到另一个节点 TreeNode本身没有任何启用的属性,因此您需要找到一些跟踪该状态的方法。一种方法是创建一个新类,该类继承TreeNode,并具有Enabled属性。另一种方法是维护禁用树节点的列表 完成后,您可以使用Tr

如何禁用特定节点,以便用户无法选择它。为用户隐藏它也是有效的

我尝试了Visible属性,但它隐藏了整个树(所有节点)。我只想禁用/隐藏几个节点

C#使用Visual Studio 2005 TreeNode编辑器。

两个选项:

  • 动态添加和删除节点
  • 所有者绘制并处理单击并将其发送到另一个节点

  • TreeNode
    本身没有任何启用的
    属性,因此您需要找到一些跟踪该状态的方法。一种方法是创建一个新类,该类继承
    TreeNode
    ,并具有
    Enabled
    属性。另一种方法是维护禁用树节点的列表

    完成后,您可以使用
    TreeNode
    的属性使其显示为灰色(例如使用值)

    最后,您可以使用事件来评估用户选择特定节点是否合适,并在该事件中使用事件参数的
    Cancel
    属性来防止在禁用该节点时选择该节点:

    private void TreeView_BeforeSelect(object sender, TreeViewCancelEventArgs e)
    {
        e.Cancel = !NodeIsEnabled(e.Node);
    }
    

    我刚刚找到了另一种方法来处理残废的树节点。如果在不想使用的树节点中使用灰色,可以请求颜色,但不允许所有灰色节点

        private void TreeView_BeforeSelect(object sender, TreeViewCancelEventArgs e)
        {
            if(SystemColors.GrayText==e.Node.ForeColor)
                e.Cancel = true;
        }
    

    通过yourNode设置禁用的节点。SelectAction=TreeNodeAction。无

    我认为您还需要禁用此节点的可扩展性
    yourNode.PopulateOnDemand=false

    treeNode操作位于System.Web.UI.WebControls命名空间中。问题是关于Windows窗体的。当然,如果使用CheckBox属性,还需要处理BeforeCheck事件:private void TreeView_BeforeCheck(对象发送方,TreeViewCancelEventArgs e){if(SystemColors.GrayText==e.Node.ForeColor)e.Cancel=true;}