цикл по элементам управления страницы - использование одной и той же логики для нескольких типов элементов управления - PullRequest
1 голос
/ 16 апреля 2010

Я перебираю элементы управления страницей вот так

      foreach (Control ctrl in control.Controls)
      {
          if (ctrl is System.Web.UI.WebControls.TextBox || ctrl is System.Web.UI.WebControls.Label)
          {
          }
      }

Я хочу иметь возможность объявить переменную внутри этого оператора if того же типа, что и ctrl в foreach, чтобы я мог проверить свойства элемента управления и выполнить некоторые манипуляции таким образом. Я не хочу дублировать код, например, если «ctrl» - это текстовое поле или метка, потому что я бы выполнял один и тот же код для этих двух типов веб-элементов управления.

Любая помощь, ведущая меня в правильном направлении, очень ценится!

Спасибо

1 Ответ

0 голосов
/ 16 апреля 2010

Попробуйте использовать интерфейс ITextControl:

foreach (Control ctrl in control.Controls)
{
    ITextControl text = ctrl as ITextControl;
    if (text != null)
    {
        // now you can use the "Text" property in here,
        // regardless of the type of the control.
    }
}

Вы также можете использовать метод расширения OfType, чтобы немного это исправить:

foreach (ITextControl text in control.Controls.OfType<ITextControl>())
{
    // now you can use the "Text" property in here,
    // regardless of the type of the control.
}
...