为什么在此代码中会多次运行MessageBox?

时间:2017-01-04 19:59:43

标签: c#

我是编程和编写代码的新手。 我有一个非常简单的形式,有6个按钮。 当我点击每个按钮时,只有发件人的文字才能获得Magenta。 但Button3做了进一步的工作,并打开了一个“Hello”messageBox。 问题是当我点击Button3时,它会显示“hello”字符串4次。为什么? 我认为并期望它不再显示它。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Typhok(object sender, EventArgs e)
    {
        foreach (Control x in this.Controls)
        {
            if (x.Equals(sender))
                x.ForeColor = Color.Magenta;
            else
                x.ForeColor = Color.Black;
        }
        b3.Click += new EventHandler(Popup);
    }

    private void Popup(object sender, EventArgs e)
    {
        MessageBox.Show("hello!");
    }
}

更新:有人能解释为什么原始代码有这个问题吗?

1 个答案:

答案 0 :(得分:8)

在构造函数中注册事件处理程序,而不是在Typhok方法中。最终代码应如下所示:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        b3.Click += new EventHandler(Popup);
    }

    private void Typhok(object sender, EventArgs e)
    {
        foreach (Control x in this.Controls)
        {
            if (x.Equals(sender))
                x.ForeColor = Color.Magenta;
            else
                x.ForeColor = Color.Black;
        }
    }

    private void Popup(object sender, EventArgs e)
    {
       MessageBox.Show("hello!");
    }
}