我正在寻找一种使用其ContextMenu启用/禁用按钮的方法。但是我的问题是,当我单击“启用MenuItem”以禁用ContextMenu不再显示的按钮时。

有没有办法在禁用的控件上保留ContextMenu或其他行为?

ContextMenu cm = new ContextMenu();
cm.MenuItems.Add("Enable", new EventHandler(enableButton));

this.button1.ContextMenu = cm;



private void enableButton(object sender, EventArgs e)
{
    MenuItem menuItem = sender as MenuItem;
    if (menuItem != null)
    {
        ContextMenu menu = menuItem.GetContextMenu();
        Control sourceControl = menu.SourceControl;
        sourceControl.Enabled = !sourceControl.Enabled;
    }
}

最佳答案

使您自己具有禁用功能,将按钮设置为灰色,拦截其事件,这样,该按钮将显示为禁用状态,但被启用以接收ContextMenu事件。此行为是“按设计”。

您可以轻松地计算出btn.Font使其处于禁用状态。对于事件,一种方法是在“禁用”上取消订阅,然后在“启用”上挂钩,这是获取控件事件的示例...

dynamic controltype = btn;
var events = Type.ReflectionOnlyGetType(controltype.AssemblyQualifiedName, false, true).GetEvents();
foreach (var item in events)
{
  //EventHandler<T> use a generic Event Handler to Subscribe and Unsubscribe
}

关于c# - 禁用的控件(如按钮)上的ContextMenu,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41763826/

10-12 07:39