【问题标题】:Turning off plus/minus sign on specific TreeView nodes关闭特定 TreeView 节点上的加号/减号
【发布时间】:2021-10-09 21:08:34
【问题描述】:

我有一个 System.Windows.Forms.TreeView 控件,我想为它关闭特定子 TreeNode 对象的加号/减号。我知道我可以使用 TreeView.ShowPlusMinus 属性在整个 TreeView 级别执行此操作,但我想知道是否可以仅隐藏选定 TreeNode 对象的标志。

【问题讨论】:

  • 您的意思是删除节点吗?
  • @jp2code:通过从 Web 服务读取数据来动态加载节点。在将每个节点加载到树中之前,我想检查它是否应该是不可折叠的节点,在这种情况下,我想禁用加号/减号(另外,我还将节点置于展开模式并禁用正常双击展开/折叠行为)。将节点添加到树后,我不需要再次调整加号/减号。

标签: c# winforms


【解决方案1】:

唉,Windows 窗体 TreeView 类包装了原生 tree view control,并且该控件仅支持全局显示或隐藏加号/减号。

这是因为,在内部,该标志映射到 TVS_HASBUTTONS 控件样式,这当然会影响整个控件而不是单个项目。

据我所知,实现您想要的唯一方法是处理DrawNode 事件和render everything yourself

【讨论】:

    【解决方案2】:

    根据您上面的编辑,如果它是不可折叠的节点,您应该覆盖 TreeView 的 BeforeCollapse 事件以取消折叠:

    private void treeView1_BeforeCollapse(object sender, TreeViewCancelEventArgs e) {
      MyParameter myP = e.Node.Tag as MyParameter;
      if (myP != null) {
        if (myP.Type == MyParameterType.NonCollapsible) {
          e.Cancel = true;
        }
      }
    }
    

    【讨论】:

    • 抱歉,我意识到我的评论可能有点误导。而不是说“禁用”加号/减号我应该说“隐藏”。基本上我想禁用展开/折叠行为并隐藏加号/减号,以便用户清楚节点不能折叠。我不知道该怎么做的关键是隐藏加号/减号。
    • 我认为使用内置控件是不可能的。如果你想离轴,你必须自己动手
    【解决方案3】:

    每个 TreeViewItem (TVITEM) 都有一个 cChildren 成员。 如果为 0,则加减号被隐藏。如果为 1,则显示 + 号。

    http://msdn.microsoft.com/en-us/library/windows/desktop/bb773456%28v=vs.85%29.aspx

    不要忘记 TVIF_CHILDREN 标志。

    我回答,因为我搜索了同一个问题,但没有找到答案。

    【讨论】:

      【解决方案4】:

      删除加号/减号setLoadOnDemand为false;

      Telerik.WinControls.UI.RadTreeNode Node = new Telerik.WinControls.UI.RadTreeNode();
      Node.LoadedOnDemand = false;
      

      【讨论】:

      • 问题是关于胜利表格(System.Windows.Forms.TreeView)而不是telerik。您的帖子不是问题的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 2016-09-22
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多