gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:03:24 24 4
gpt4 key购买 nike

我有组合框,每个组合框都有其 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com