Как проверить тип управления в корпусе коммутатора - PullRequest
0 голосов
/ 22 ноября 2018

Как проверить типы элементов управления в операторе регистра переключателя?

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 голосов
/ 22 ноября 2018

попробуй:

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

    case "Label": MessageBox.Show("This is My Label");
    break;
}
0 голосов
/ 22 ноября 2018

Начиная с C # 7, вы можете использовать шаблоны типов для этого:

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

Здесь _ - это синтаксис для сброс , что означает, что вы неВам не нужно обращаться к значению как 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...