Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何";“未设置”;事件_C#_.net_Events - Fatal编程技术网

C# 如何";“未设置”;事件

C# 如何";“未设置”;事件,c#,.net,events,C#,.net,Events,如果我在designer.cs页面中设置了combobox click事件,然后在程序运行期间的某个时间点,基于某些条件,我不再希望设置combobox click事件,那么我如何“取消设置”它?我尝试了comboboxname。单击+=null,我尝试将其设置为另一个不起任何作用的伪函数…两者都不起作用。设置: comboBox.Click += EventHandler; 取消设置: comboBox.Click -= EventHandler; 使用-=运算符 this.MyEvent

如果我在designer.cs页面中设置了combobox click事件,然后在程序运行期间的某个时间点,基于某些条件,我不再希望设置combobox click事件,那么我如何“取消设置”它?我尝试了comboboxname。单击+=null,我尝试将其设置为另一个不起任何作用的伪函数…两者都不起作用。

设置:

comboBox.Click += EventHandler;
取消设置:

comboBox.Click -= EventHandler;
使用-=运算符

this.MyEvent -= MyEventHandler;

您的问题表明您对c#中的事件没有很好的理解-我建议您深入了解它。

假设您的处理程序是这样分配的:

this.comboBox1_Click += new System.EventHandler(this.comboBox1_Click);
this.comboBox1.Click -= new System.EventHandler(this.comboBox1_Click);
按如下方式禁用它:

this.comboBox1_Click += new System.EventHandler(this.comboBox1_Click);
this.comboBox1.Click -= new System.EventHandler(this.comboBox1_Click);

您不能使用的原因

comboboxname.Click = null


事件
单击
实际上包含事件处理程序列表。您的事件可能有多个订阅服务器,若要撤消订阅事件,您必须仅删除自己的事件处理程序。正如这里所指出的,您可以使用
-=
操作符来完成此操作。

您必须删除对eventhandler的引用,正如Mehmet在这里所做的那样。如果你只是这样做:杰夫的建议,它实际上不会导致处理程序被删除。欧文-你能详细说明吗?我尝试了我的示例,我的“-=”行确实导致事件处理程序不再被调用只有在使用-=时,新实例等于事件调用列表中的某个实例时,才会起作用。您应该保留对要删除的处理程序的引用。我知道保留引用是正确的方法。我仍然对我发布的代码中发生的事情感到困惑——它在我刚刚在VS2005中构建的玩具应用程序中工作。从那以后行为发生了变化吗?我不再认为保留推荐信是必要的或正确的。它不仅像我的答案所显示的那样对我有效,而且在这个线程上的讨论表明remove并不比较例如相等,而是比较目标和方法签名的相等。