Переключить все элементы управления только для чтения при нажатии кнопки в WinForm
Вопрос
Я хочу иметь возможность настроить набор элементов управления в форме на доступ только для чтения и обратно одним нажатием кнопки.Есть ли способ перебрать их в цикле? this.Controls
может быть......
Спасибо!
Решение
Если вы хотите настроить ВСЕ элементы управления только для чтения, вы можете сделать что-то вроде:
foreach(Control currentControl in this.Controls)
{
currentControl.Enabled = false;
}
Если то, что вы действительно хотите сделать, это установить для НЕКОТОРЫХ элементов управления режим "только для чтения", я бы предложил сохранить список соответствующих элементов управления, а затем выполнить ForEach для ЭТОГО списка, а не для всех из них.
Другие советы
Включить / отключить их несложно, смотрите Ответ 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
}
Лично я бы поместил все элементы управления (и подконтрольные элементы) Я хочу повлиять на Panel
- тогда просто измените состояние сингла Panel
.Это означает, что вам не нужно начинать сохранять старые значения (чтобы вернуть их обратно - возможно, вы не захотите предполагать, что все они были включены, например).
Я бы посоветовал вам использовать свойство 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);
}