没有静态的单事件处理程序实例

时间:2016-01-19 09:03:50

标签: c#

我在usercontrol中有一个事件

public event EventHandler EH_OpenDefaultClick;

单击单选按钮时的表单将订阅此事件。但是这个表单不会被销毁,只要单击单选按钮,我就会订阅该事件

ucStdButton_Recipe.EH_OpenDefaultClick += ucStdButton_Recipe_EH_OpenDefaultClick;

上面唯一的一行,每次都会订阅,因此触发多次。我可以添加代码来比较它是否为null。但最终代码对所有这些== null

都不整齐
if (ucStdButton_Recipe.EH_OpenDefaultClick == null)
    ucStdButton_Recipe.EH_OpenDefaultClick += ucStdButton_Recipe_EH_OpenDefaultClick;

我无法将事件声明为静态,因为事件在运行时是预订的。是否有任何声明类型允许我在没有比较声明的情况下更容易订阅

1 个答案:

答案 0 :(得分:0)

也许这样的事情可以帮助你。

    private EventHandler eh_OpenDefaultClick;
    public event EventHandler EH_OpenDefaultClick
    {
        add
        {
            eh_OpenDefaultClick -= value;
            eh_OpenDefaultClick += value;
        }
        remove
        {
            eh_OpenDefaultClick -= value;
        }
    }

在添加处理程序之前删除处理程序可确保在任何时刻都连接相同处理程序的多个实例。如果您想只使用一个处理程序,请将eh_OpenDefaultClick -= value;更改为if (eh_OpenDefaultClick == null)

当然,您需要调用私人eh_OpenDefaultClick来举起活动