【问题标题】:Setting the ContextMenuStrip for all nodes on a level in a TreeView?为 TreeView 中的一个级别上的所有节点设置 ContextMenuStrip?
【发布时间】:2016-10-06 20:11:43
【问题描述】:

我真的很难想出一个聪明的方法来为正确的节点设置正确的 ContextMenuStrip。我有一个 3 个级别的树视图。除此之外,我还创建了 3 个不同的 ContextMenuStrips,每个都代表着它们受人尊敬的级别。是否有任何人遇到过解决此问题的简单方法或技巧?

还有没有办法让它右键单击一个节点使其成为选定节点?或者 aka 和左键点击一样。

对于二合一的问题很抱歉,但我想如果有人对这个主题有足够的了解来解决我的一个问题,那么他们很有可能也会知道第二个问题。

编辑:我用这行代码找到了第二个问题的解决方案:

treeView.NodeMouseClick += (sender, args) => treeView.SelectedNode = args.Node;

【问题讨论】:

  • @Steve winformsorry
  • 我通常有一些东西可以返回 List 中树的每个级别,该列表的每个成员都将分配其 ContextMenu。然后调用 TreeView.Nodes.AddRange(List.ToArray())

标签: c# winforms treeview contextmenustrip


【解决方案1】:

使用NodeMouseClick事件设置选中节点的ContextMenuStrip属性:

void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
  if (e.Button == MouseButtons.Right) {
    treeView1.SelectedNode = e.Node;
  }

  if (e.Node.Level == 0) {
    e.Node.ContextMenuStrip = cms1;
  } else if (e.Node.Level == 1) {
    e.Node.ContextMenuStrip = cms2;
  } else  if (e.Node.Level == 2) {
    e.Node.ContextMenuStrip = cms3;
  }
}

【讨论】:

  • 这太完美了,谢谢你,这正是我所需要的!
  • 您会说您对.NET 的TreeView 非常熟悉吗?我还有一些关于 Nodes 的问题,我们可以在这里聊天吗?不确定他们在此站点上是否有私人消息选项。基本上我想知道如何将索引添加到我将要创建的节点的名称中。我当前的代码是:“treeView1.SelectedNode.Nodes.Add("[" + treeView1.SelectedNode.Index + "]" + selectedModule);"但是这不起作用,因为它只添加了父节点的索引。不是新节点。我该怎么办?
  • @CapnJack 这将是一个新问题。我不知道你在用那个代码做什么,但听起来你想要子节点计数,比如 treeView1.SelectedNode.Nodes.Count().ToString() 而不是索引。
  • 这行得通-sorta-但是如果我去删除一个节点,那么如果我添加一个新节点,我的树上会有2个具有相同索引的节点,不是吗?
  • 为了给你上下文,我有一棵树,我有一个根,该根的多个子,然后在第二层的每个子下都有一个最后的第三层子。我需要在它们的显示名称中索引我的第二层节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多