Переключить все элементы управления только для чтения при нажатии кнопки в WinForm - PullRequest
2 голосов
/ 26 мая 2009

Я хочу иметь возможность установить для группы элементов управления только для чтения и вернуться с помощью нажатия кнопки. Есть ли способ пройти через них? this.Controls возможно ......

Спасибо! * * 1004

Ответы [ 4 ]

5 голосов
/ 26 мая 2009

Если вы хотите установить ВСЕ элементы управления только для чтения, вы можете сделать что-то вроде:

foreach(Control currentControl in this.Controls)
{
    currentControl.Enabled = false;
}

Если то, что вы действительно хотите сделать, это установить НЕКОТОРЫЕ из элементов управления только для чтения, я бы предложил сохранить список соответствующих элементов управления, а затем выполнить ForEach в списке ТО, а не все из них.

3 голосов
/ 26 мая 2009

Установить их Включено / Отключено легко, см. Ответ GWLIosa'a.

Однако не все элементы управления имеют свойство только для чтения. Вы можете использовать что-то вроде:

foreach (Control c in this.Controls)
{
  if (c is TextBox)
    (c as TextBox).Readonly = newValue;
  else if (c is ListBox)
    (c as ListBox).Readonly = newValue;
  // etc
}
2 голосов
/ 26 мая 2009

Лично я бы поместил все элементы управления (и подэлементы управления), на которые я хочу воздействовать, в Panel - затем просто изменил бы состояние одного Panel. Это означает, что вам не нужно начинать сохранять старые значения (чтобы вернуть их обратно - вы, возможно, не захотите предполагать, что они все запущены, например).

1 голос
/ 27 мая 2009

Я бы предложил вам использовать свойство Enabled, предложенное GWLlosa, но если вы хотите или хотите использовать свойство ReadOnly, попробуйте следующее:

        foreach (Control ctrl in this.Controls)
        {
            Type t = ctrl.GetType();

            PropertyInfo propInfo = t.GetProperty("ReadOnly");

            if (propInfo != null)
                propInfo.SetValue(ctrl, true, null);
        }
...