我正在寻找一种使用其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/