【问题标题】:Disable or grey out a node in the TreeNode Editor在 TreeNode 编辑器中禁用或灰显节点
【发布时间】:2010-11-30 13:21:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# visual-studio treeview visibility


    【解决方案1】:

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

    完成后,您可以使用TreeNodeForeColor 属性使其显示为灰色(例如使用SystemColors.GrayText 值)。

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

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

    【讨论】:

      【解决方案2】:

      我刚刚找到了另一种处理禁用树节点的方法。如果您不想使用的树节点中的灰色,您可以要求颜色并且不允许所有灰色节点。

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

      【讨论】:

      • 当然,如果使用 CheckBox 属性,还需要处理 BeforeCheck 事件: private void TreeView_BeforeCheck(object sender, TreeViewCancelEventArgs e) { if (SystemColors.GrayText == e.Node. ForeColor) e.Cancel = true; }
      【解决方案3】:

      两种选择:

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

      【讨论】:

        【解决方案4】:

        通过yourNode.SelectAction = TreeNodeSelectAction.None设置禁用节点

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

        【讨论】:

        • TreeNodeSelectAction 在 System.Web.UI.WebControls 命名空间中。问题是关于 Windows 窗体的。干杯
        猜你喜欢
        • 1970-01-01
        • 2011-02-11
        • 2011-08-25
        • 2012-02-01
        • 1970-01-01
        • 2023-03-27
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多