为 TreeView 中一个级别上的所有节点设置 ContextMenuStrip?

Setting the ContextMenuStrip for all nodes on a level in a TreeView?

我真的很难想出一个聪明的方法来为正确的节点设置正确的 ContextMenuStrip。我有一个具有 3 个级别的树视图。除了它之外,我还创建了 3 个不同的 ContextMenuStrip,每个都有各自的级别。有没有人遇到过解决这个问题的简单方法或技巧?

还有没有办法让它右键单击一个节点使其成为选定的节点?或者又名与左键单击相同。

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

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

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

使用 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;
  }
}