【问题标题】:Combining Multiple Event Methods组合多个事件方法
【发布时间】:2014-10-20 17:12:03
【问题描述】:

希望重构一些应用程序代码。我有一个 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 中对象属性上的事件。有没有一种有效的方法来组合多个事件方法来清理代码?谢谢!

【问题讨论】:

标签: c# visual-studio events


【解决方案1】:

定义单个事件,如:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      稍微详细地说,即使您想根据触发事件的控件执行不同的操作,也可以采用这种方法。

      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
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-15
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多