0

我必须在哪里写这段代码?

button1.MouseHover += Common_MouseHover;

问题是我想声明一个事件处理程序并将每个按钮指向它。这是常见的处理程序:

private void Common_MouseHover(object sender, EventArgs e)
{
     Button btn = sender as Button;
     if (btn != null)
         btn.Image = pic
}

但我不知道我必须在哪里写:

button1.MouseHover += Common_MouseHover;
utton2.MouseHover += Common_MouseHover;
.. etc

在设计师?具体在哪里?

4

3 回答 3

3

在表单的设计器或构造器中,或者如果您在创建时创建动态按钮。

public Form1()
{
    InitializeComponent();

    button1.MouseHover += new EventHandler(Common_MouseHover);
    button2.MouseHover += new EventHandler(Common_MouseHover);

}

如果在属性编辑器中。

在此处输入图像描述

于 2013-01-17T09:21:56.990 回答
0

从技术上讲,这取决于您何时要分配它。例如,您可能不希望在满足某些条件之前由该方法处理事件:然后在条件为真时分配事件处理程序。

请记住,如果您不小心,分配事件处理程序可能会导致内存泄漏。例如,您可能有一个计时器,它不断地为事件分配相同的事件处理程序。您需要检查事件是否已经具有事件处理程序,或者它是否为空,或者您需要防止重复的任何内容。您可能还想使用 -= 运算符动态删除事件处理程序。

对于给出的示例,表单的构造函数似乎是正确的,并且是手动分配事件处理程序的最常见位置。

于 2013-01-17T09:32:22.913 回答
0

Constructor 在您的表单中 调用以下函数InitializeComponent();-

    private void init()
    {
        foreach (Control ctrl in this.Controls)
        {
            if (ctrl is Button)
            {
                (ctrl as Button).MouseHover += new EventHandler(Common_MouseHover);
            }
        }
    }

像这样称呼它——

    // Form Constructor
    public Form3()
    {
        InitializeComponent();
        Init();
    }
于 2013-01-17T09:34:02.730 回答