2016-01-12 2 views
2

Я установил все мои TextBoxs.readOnly = true; в форме по умолчанию. Но когда нажата кнопка Edit Button. Я хочу это сделать все TextBoxs.readOnly = false;Установить несколько текстовых полей, редактируемых после нажатия кнопки на WinForm

Я пробовал;

private void btnEdit_Click(object sender, EventArgs e) 
{ 
    foreach (var textBox in this.Controls.OfType<TextBox>()) 
     textBox.ReadOnly = false; 
} 

Каждый TextBox имеет уникальное имя. Самый простой способ сделать это будет следующим, ниже. Но я не хочу так поступать.

txtName.ReadOnly = false; 
txtAddress.ReadOnly = false; 
... 
+0

При таком подходе можно установить только' TextBoxes', которые размещаются непосредственно в форме не те, которые находятся внутри другой контейнер, например 'GroupBox' или' Panel'. Для этой цели вам нужен рекурсивный метод: http: //stackoverflow.com/a/34676012/2946329 –

+0

все текстовые поля внутри 'GroupBox' – AndroidAL

+0

@ user2946329 верны, но я бы предпочел либо [этот ] (http://stackoverflow.com/a/3426721/1997232) рекурсивный метод или просто удерживайте ссылки управления в выделенном массиве. Если элементы управления находятся внутри одного и того же контейнера, замените «this» экземпляром контейнера (в вашем случае «GroupBox»). – Sinatr

ответ

3

При таком подходе можно установить только TextBoxes «s ReadOnly, которые размещаются непосредственно в форме, не те, которые находятся внутри другого контейнера, как GroupBox или Panel. Для этого вам нужен метод recursive, если у вас более одного контейнера (example1, example2). Но так как все ваши TextBoxes внутри один GroupBox затем просто заменить this с вашими GroupBox «ы Name так:

foreach (var textBox in groupBox1.Controls.OfType<TextBox>()) 
    textBox.ReadOnly = false; 
Смежные вопросы