private void HideAll()
{
foreach (TextBox tb in this.Controls.OfType<TextBox>())
tb.Enabled = false;
}
У меня есть четыре TextBox
и один ComboBox
. В зависимости от выбранного элемента в ComboBox
, нужно включить/выключить (Enabled) TextBox
.
Самый, как я счел, оптимальный вариант - это сначала все отключить и потом включить нужные, но функция почему-то вообще не вызывается, даже вставлял MessageBox
- всё тщетно.
Подскажите, пожалуйста, в чем дело или другой оптимальный вариант, т.к в своем варианте я не учел, что на форме будут скрыты все TextBox
(у меня их на самом деле не четыре, а больше)
comboBox1.SelectedIndexChanged += (s, e) => {
comboBox2.Items.Clear();
if (comboBox1.SelectedIndex == 0) {
HideAll();
textBoxAn1.Enabled = true;
textBoxAn2.Enabled = true;
}
else if (comboBox1.SelectedIndex == 1) {
HideAll();
textBoxAn1.Enabled = true;
textBoxAn2.Enabled = true;
textBoxAn3.Enabled = true;
}
else if (comboBox1.SelectedIndex == 2) {
HideAll();
textBoxAn1.Enabled = true;
textBoxAn2.Enabled = true;
textBoxAn3.Enabled = true;
textBoxAn4.Enabled = true;
}
comboBox2.SelectedIndex = 0;
};
Свойство Controls
для элемента управления возвращает только те элементы, которые непосредственно в нем находятся. Для обхода всех элементов (включая вложенные) используйте рекурсивный вариант:
public static IEnumerable<Control> GetAll(this Control control)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll(ctrl)).Concat(controls);
}
В вашем случае это не нужно, т.к. достаточно просто указать для перебора группирующий элемент:
foreach (TextBox tb in groupBox1.Controls.OfType<TextBox>())
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть WCF-сервис, крутится на сервере на IISeОн должен логировать IP клиентов, подключившихся к нему
Проблема в том, что метод ResponseEnd вызывает исключение ThreadAbortException, которое мешает дебажить