【问题标题】:Dynamically Disable Particular Context Menu Item动态禁用特定上下文菜单项
【发布时间】:2013-06-28 05:04:59
【问题描述】:

我在上下文菜单中添加了 4 个菜单。如果在开始上下文菜单项被单击时,如何禁用该特定的("Start") 菜单项?

ContextMenu conMenu1 = new ContextMenu();
public Form1()
{
            InitializeComponent();
    conMenu1.MenuItems.Add("Start", new System.EventHandler(this.Start_Click));
    conMenu1.MenuItems.Add("Pause", new System.EventHandler(this.Pause_Click));
    conMenu1.MenuItems.Add("Resume", new System.EventHandler(this.Resume_Click));
    conMenu1.MenuItems.Add("Stop", new System.EventHandler(this.Stop_Click));
}

private void Start_Click(object sender, EventArgs e)
{
    // Functionalities to disable start context menu item
}

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    你可以这样做。处理 ContextMenu.Opening 事件

    private void conMenu1_Opening(object sender, CancelEventArgs e)
    {
        conMenu1.Items[0].Enabled= false;
    }
    

    【讨论】:

    • conMenu1.MenuItems[1].Enabled = false;我在 Start_Click 中添加了这段代码,它现在可以工作了,谢谢你的帮助
    • @Vignesh 为什么要将其添加到start_click。您可以在菜单打开时禁用它
    • 我的要求是,如果我单击开始按钮或开始菜单,计时器必须启动,我不希望计时器经常启动。一旦开始时间最初设置它应该是最后一个
    • +1 conmenu_Opening 是一个非常好的方法!我使用(sender as ContextMenuStrip).SourceControl 拨打电话ListView
    【解决方案2】:

    使用PopUp事件如

    声明

    var trayMenu = new ContextMenu();
    trayMenu.Popup += MenuOpening;
    
    trayMenu.MenuItems.Add(...);
    ...
    

    订阅活动

    private void MenuOpening(object sender, EventArgs e)
    {         
        var cm = sender as ContextMenu;
    
        if (cm != null)
             cm.MenuItems[0].Enabled = false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      相关资源
      最近更新 更多