可以在传递给事件处理程序的Control对象上使用switch语句吗?

时间:2015-07-08 05:17:28

标签: c# event-handling switch-statement controls sender

我有多个控件共享同一个事件处理程序。而不是写一系列的

if(sender == specific_control)
{
     // do something
}

有没有办法可以使用switch语句或类似的东西?

当我输入switch(sender)时,收到一条错误消息

  

switch表达式或case标签必须是bool,char,string,intergral,enum或相应的可空类型。

2 个答案:

答案 0 :(得分:0)

如果您希望事件处理程序根据引发事件的控件执行不同的操作,为什么要为每个控件使用相同的处理程序?只需为每个控件提供自己的处理程序方法。

如果在处理所有不同事件时要执行一些公共代码,请将 放入可由各种事件处理程序方法调用的单个方法中。

如果上述建议似乎不适用于您的方案,请改进您的问题,以便明确其中的原因。请务必加入明确说明解释的a good, minimal, complete code example

答案 1 :(得分:0)

如果这些控件的类型相同,那么你可以使用" Type"控件生成switch语句:

//Just a snippet, you can use the FullName or Name to determine which
//control it belongs to...
        Type t = (sender).GetType();
        switch (t.FullName)
        {
            case "Namespace.Control1":
                break;
            case "Namespace.Control2":
                break;
        }