如何检查开关盒中的控件类型

时间:2018-11-22 09:40:50

标签: c# winforms

如何在switch case语句中检查控件类型?

Private void CheckControl(Control ctl) 
{
    switch (ctl) {
        case TextBox: MessageBox.Show("This is My TextBox");
        break;

        case Label: MessageBox.Show("This is My Label");
        break;
    }
}  

以下是上述陈述中的错误:

  

“文本框”是一种类型,在给定的上下文中无效

2 个答案:

答案 0 :(得分:14)

从C#7开始,您可以为此使用type patterns

private void CheckControl(Control ctl)
{
    switch (ctl)
    {
        case TextBox _: 
            MessageBox.Show("This is My TextBox");
            break;
        case Label _: 
            MessageBox.Show("This is My Label");
            break;
    }
}

此处_ discard 的语法,这意味着以后您无需再以TextBox(或Label)的形式访问该值。

如果要做要访问特定类型的成员,则可以引入模式变量:

private void CheckControl(Control ctl)
{
    switch (ctl)
    {
        case TextBox textBox: 
            // Use textBox for any TextBox-specific members here
            MessageBox.Show("This is My TextBox");
            break;
        case Label label: 
            // Use label for any Label-specific members here
            MessageBox.Show("This is My Label");
            break;
    }
}

答案 1 :(得分:1)

尝试:

switch (ctl?.GetType().Name) {
    case "TextBox": MessageBox.Show("This is My TextBox");
    break;

    case "Label": MessageBox.Show("This is My Label");
    break;
}