Доступ к определенным свойствам неизвестного типа - PullRequest
0 голосов
/ 26 января 2011

Я хочу протестировать все элементы управления в форме, и если данный элемент управления является TextBox, я хочу записать свойство MaxLength этого элемента управления.Я могу проверить каждый элемент управления следующим образом:

        foreach (Control ctrl in this.Controls)
        {
            if (ctrl is TextBox)
            {
                // Get the MaxLength property.
            }
        }

Я не могу понять, как получить свойство MaxLength элемента управления, поскольку оно относится к TextBox, а не к списку свойств ctrl.

Ответы [ 3 ]

6 голосов
/ 26 января 2011

Вам нужно привести ctrl к TextBox:

TextBox textBox = ctrl as TextBox;
if (textBox != null) {
    ...
}

Оператор as попытается привести свой операнд к указанному типу и вернет null если операнд другого типа.

Этот шаблон быстрее, чем проверка is с последующим приведением .

1 голос
/ 26 января 2011

Как говорит SLaks, вам нужно каким-то образом кастовать. Возможно, вы захотите использовать оператор as :

foreach (Control ctrl in this.Controls)
{
    TextBox tb = ctrl as TextBox;
    if (tb != null)
    {
        int max = tb.MaxLength;
        // ...
    }
}

Если вы ничего не делаете с элементами управления, не являющимися текстовыми полями, вы можете рассмотреть возможность использования LINQ:

foreach (TextBox tb in this.Controls.OfType<TextBox>())
{
    int max = tb.MaxLength;
    // ...
}
1 голос
/ 26 января 2011
foreach (Control ctrl in this.Controls)
{
    if (ctrl is TextBox)
    {
        var result = ((TextBox)ctrl).MaxLength;
    }
}
...