2013-06-26 3 views
0

Я создал окна образуют с несколькими кнопками, текстовые поля, выпадающие меню и т.д. В какой-то момент во время выполнения, я отключить все из них следующим образом:Отключение Многие элементы управления автоматически

Control01.Enabled = false; 
Control02.Enabled = false; 
Control03.Enabled = false; 
// ... 
Control10.Enabled = false; 

Как можно автоматизировать этот ?

ответ

5

Вы можете перечислить средства управления и отключить их:

foreach(var control in Controls.Cast<Control>()) 
    control.Enabled = false; 

Если вы хотите отключить только кнопки, вы можете использовать LINQ

foreach(var control in Controls.OfType<Button>()) 
    control.Enabled = false; 

Или если у вас есть какие-то другие критерии отбора

var controlsToDisable = Controls.OfType<TextBox>() 
           .Where(t => t.Name.StartsWith("Control")); // etc 

foreach(var control in controlsToDisable) 
    control.Enabled = false; 
+0

но обратите внимание: 'foreach (кнопка b в элементах управления)' не равно выражению LINQ. (Это часто замечается, но это приведет к попытке включить КАЖДЫЙ элемент управления в «Button») – dognose

+0

@dognose nope, существует метод 'Cast

+1

И это может помочь поместить эти элементы управления в массив, если они распределены по пользовательскому интерфейсу (например, не находясь внутри одного контейнера или только с другим которые не должны быть отключены). – MasterMastic

1

Вы можете использовать петлю for в сочетании с Controls.Find():

string controlIdNr =""; 
for(int i=1;i++;i<11) 
{ 
    controlIdNr = "Control" + i.ToString().PadLeft(2,'0'); 
    this.Controls.Find(controlIdNr,true).Enabled = false; 
} 

Это, конечно, если ваши элементы управления имеют структурированное значение id. Если вы хотите отключить все элементы управления или все элементы управления определенного типа, ответ Лазыберовского лучше!

P.S: Я не проверял код, но это идея так или иначе ...

+0

+1 btw Я думаю Метод 'Find' требует также логического параметра –

+0

@ lazyberezovsky> действительно, я отредактировал свой ответ. Я больше парень ASP.NET, а FindControl() требует только идентификатора элемента управления ;-) –

1

Если ваш макет позволяет, вы можете поместить их на панель и отключить панель в одной строке. Или несколько панелей.