【问题标题】:Is it possible to disable context menu items based on the selection on Treeview是否可以根据 Treeview 上的选择禁用上下文菜单项
【发布时间】:2010-09-18 10:17:05
【问题描述】:

我将有一些树视图的节点,如下所示

根 |-> some.txt(在运行时添加的文本文件) |-> 孩子(一些.txt 的孩子) |-> child1(child for child)

我在上下文菜单中设计了一些选项,例如新建和删除

我需要的是,当我右键单击 Root、孩子或孩子时,我想禁用删除选项

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

    对于 ContextMenu,您可以在显示菜单之前处理 ContextMenu.Popup 事件并启用/禁用菜单选项。

    对于 ContextMenuStrip,您可以使用 Opening 事件执行相同操作。

    例如,如果您使用菜单项标记属性来确定是否支持删除(这仅用于示例)。你可以做一些这样的事情

    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
    {
      if ((int)treeView1.SelectedNode.Tag == 1)
      {
        removeToolStripMenuItem.Enabled = true;
      }
      else
      {
        removeToolStripMenuItem.Enabled = false;
      }
    }
    

    【讨论】:

    • 但是对于 selectednode.tag 我总是得到 Null 值
    • 嘿,我设置了标签属性,但我无法禁用工具条菜单
    • @Dorababu,树中的节点被选中了吗?我对此进行了测试,它确实有效。你能分享一些你的代码吗?您是否在事件处理程序中设置了断点并检查事件是否被触发?
    • 感谢它为我工作的代码。我只是使用 Convert.ToInt16
    【解决方案2】:
    // Remove all the Empty sub menu items
    int counter = MainMenu.Items[1].ChildItems.Count;
    for(int i=0; i<counter;i++)
    {
        foreach (MenuItem item in MainMenu.Items[1].ChildItems)
        {
            if (item.ChildItems.Count != 0)
                continue;
            MainMenu.Items[1].ChildItems.Remove(item);
            break;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 1970-01-01
      • 2011-11-04
      • 2012-02-23
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多