c# - 检查哪个对象调用了事件方法

标签 c# winforms

我有组合框,每个组合框都有其 SelectedIndexChanged 事件。 我不想编写每个 ComboBox 的事件,但我想编写一个事件方法来检查哪个 ComboBox 调用事件并让控件为每个 Combobox 执行特定方法。 我搜索并这样写:

private void eventmethod(object sender, EventArgs s)
{
    ComboBox cb = sender as ComboBox;
    if (cb != null & cb.Name.Equals("combobox1"))
    {
        method1();
    }
    else if (cb != null & cb.Name.Equals("combobox2"))
    {
        method2();
    }
}

有没有更高效的检查方式?

最佳答案

这种方法打破了 Single Responsibility Principle (SRP)除非每个 ComboBox.SelectedIndexChanged Event做同样的事情。

最好为每个控件都有一个事件处理程序,以便可以轻松分离特定的行为。如果为每个 ComboBox 给出特定的行为,并且它们也有共同的行为,然后使用辅助方法来执行共同的任务。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
    doesCommonTasksToBePerformedThroughAHelperMethod();
}

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) {
    // Does specific tasks
    doesCommonTasksToBePerformedThroughAHelperMethod();
}

private void doesCommonTasksToBePerformedThroughAHelperMethod() {
    // Perform common tasks
}

这是首选做法。

否则,请检查控件本身。

var cb = sender as ComboBox;

if (cb == null) return;

switch(cb) {
    case cb.Equals(comboBox1): 
        // Do something
        break;
    case cb.Equals(comboBox2):
        // Do something
        break;
}

switch 语句很少是好事。以下是有关该主题的一些链接。

  1. How to explain why a developer should avoid case statements and create some new classes?
  2. Refactoring a Switch statement
  3. Switch Statements

关于c# - 检查哪个对象调用了事件方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25690138/

相关文章:

c# - 使用对比度传递函数调整相机模块焦点

c# - 当不能选择多重继承时如何重用代码?

C# RSS 聚合,如何以编程方式格式化文本

c# - 使标签大小适合绘制的文本

c# - 用空字符串替换双引号 C#

c# - asp.net core dbcontext 在计时器结束时被释放

c# - 如何在我的 View 中仅显示不同的名称(来 self 的模型)?

c# - 以编程方式创建动画位图图像

c# - 在组合框中选择一个项目并将组合框文本设置为不同的?

c# - 如何在 C# 中创建自定义的打开文件对话框