Переключить все элементы управления только для чтения при нажатии кнопки в WinForm

StackOverflow https://stackoverflow.com/questions/912331

Вопрос

Я хочу иметь возможность настроить набор элементов управления в форме на доступ только для чтения и обратно одним нажатием кнопки.Есть ли способ перебрать их в цикле? 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);
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top