结合多种事件方法

时间:2014-10-20 17:12:04

标签: c# visual-studio events

希望重构一些应用程序代码。我有一个GUI,它有几个相同的事件,反映在不同的标签,文本框等......

例如:

    private void textBox1_Enter(object sender, EventArgs e)
    {
        textBox1.BackColor = Color.LightCyan;
    }

    private void textBox2_Enter(object sender, EventArgs e)
    {
        textBox2.BackColor = Color.LightCyan;
    }

我只是将这些方法分配给Visual Studio中对象属性的事件。有没有一种有效的方法来组合多个事件方法来清理代码?谢谢!

3 个答案:

答案 0 :(得分:3)

定义单个事件,如:

private void textBox_Enter(object sender, EventArgs e)
{
    TextBox textBox = sender as TextBox;
    if (textBox != null)
        textBox.BackColor = Color.LightCyan;
}

然后将该事件分配给所有TextBox Enter事件,例如:

textBox1.Enter += textBox_Enter; //Same event handler
textBox2.Enter += textBox_Enter; //Same event handler

答案 1 :(得分:0)

如果两个事件处理程序都执行相同的逻辑,就像您在此处列出的那样,只需创建1个事件处理程序并将其分配给两个组件。

private void TextBox_Enter(object sender, EventArgs e)
{
    TextBox textBox = sender as TextBox;
    if (textBox != null) {
        textBox.BackColor = Color.LightCyan;
    }
}

答案 2 :(得分:0)

稍微详细说明,即使您希望根据触发事件的控件执行不同的操作,也可以采用此方法。

private void textBox_Enter(object sender, EventArgs e)
{
    //Check if the sender is textBox1
    if(ReferenceEquals(sender, textBox1))
    {
        //Perform action on textBox1
    }

    //Check if the sender is textBox2
    if(ReferenceEquals(sender, textBox2))
    {
        //Perform action on textBox2
    }
}