如何在WinForms中暂时禁用事件处理程序?
答案 0 :(得分:50)
可能最简单的方法(不需要取消订阅或其他东西)是声明一个布尔值并在处理程序的开头检查它:
bool dontRunHandler;
void Handler(object sender, EventArgs e) {
if (dontRunHandler) return;
// handler body...
}
答案 1 :(得分:49)
从什么角度禁用?如果要从处理程序上的委托列表中删除范围内的方法,则可以执行..
object.Event -= new EventHandlerType(your_Method);
这将从代理列表中删除该方法,您可以稍后使用
重新附加该方法object.Event += new EventHandlerType(your_Method);
答案 2 :(得分:1)
我是这样做的,使用控件扩展名。
public static void SetDatasource(
this ComboBox cb,
object dataSource,
EventHandler _SelectedIndexChanged_eventHandler = null,
EventHandler _SelectedValueChanged_eventHandler = null)
{
//disable events
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged -= _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged -= _SelectedValueChanged_eventHandler;
if (cb.InvokeRequired)
{
cb.BeginInvoke(new _d_SetDatasource_ComboBox(SetDatasource), new object[] { cb, dataSource, _SelectedIndexChanged_eventHandler});
}
else
{
cb.DataSource = dataSource;
//events enabled again
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged += _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged += _SelectedValueChanged_eventHandler;
}
}
private delegate void _d_SetDatasource_ComboBox(ComboBox cb, object dataSource, EventHandler _SelectedIndexChanged_eventHandler = null, EventHandler _SelectedValueChanged_eventHandler = null);
答案 3 :(得分:0)
禁用组件的事件。伪代码:
YourComponent.YourComponentEvent -= ExistingMethodForTheEvent;
启用
YourComponent.YourComponentEvent += ExistingMethodForTheEvent;
DataGridView 中 CellFormatting 等事件的示例:
//enabling
DataGridView1.CellFormatting += DataGridView1_CellFormatting;
//disabling
DataGridView1.CellFormatting -= DataGridView1_CellFormatting;
private void DgvBillings_CellFormatting(...) {
...
}
答案 4 :(得分:0)
如果您对一堆复选框或单选按钮使用一个事件处理程序,您还可以使用以下内容:
listBlobsByHierarchy(string, ContainerListBlobsOptions)