У меня возникла проблема и без правильного ключевого слова поиска я не смог найти ничего полезного.C#: видимость элементов управления
В моих свойствах Элементы управления: Текстовые поля, Кнопки, CheckBoxes и ListBox. Они находятся на панели (default_panel). Есть еще одна панель: link_panel. Я думал, что стоит вспомнить.
Итак, когда я нажимаю на кнопку меню, запускает шоу ***(), сначала скрывая все элементы управления.
Form1 hd = (Form1)Application.OpenForms["form1"];
foreach (Control c in hd.Controls)
{
c.Visible = false;
}
И затем это шоу ***() начинает включать (делать видимыми) необходимые элементы управления.
hd.box1.Visible = true;
hd.box2.Visible = true;
hd.label1.Visible = true;
hd.label1.Text = "Sample Text";
Проблема возникла, когда мне нужна коробка1 в другой Show ***(). Блок2 не станет невидимым. Если я попробую сделать:
TextBox tb = c as TextBox;
tb.Visible = false;
Это происходит с помощью NullReferenceExecption (я знаю, что это значит). Но когда я делаю простой, поскольку первый код работает без каких-либо проблем (только эта небольшая ошибка).
Существует множество элементов управления в панели для обработки отдельно.
Так что для большей точности:
Есть два этикеток "Enabled" на панели.
public void ShowCharacterTable()
{
Form1 hd = (Form1)Application.OpenForms["form1"];
foreach (Control c in hd.Controls)
{
c.Visible = false;
}
hd.label1.Visible = true;
hd.label2.Visible = true;
Так пример метод здесь.
Должно быть только одно, но оба они видны.
public void ShowRelationTable()
{
Form1 hd = (Form1)Application.OpenForms["form1"];
foreach (Control c in hd.Controls)
{
if (c is TextBox)
{
c.Visible = false;
}
}
hd.label1.Visible = true;
}
Ps .: Если я правильно помню, это worekd, прежде чем я добавил панели.
Ваш код имеет ошибки синтаксиса (например, 'HD = (Form1) Application.OpenForms Form1 [" form1]; '). Пожалуйста, измените вопрос адресовать их –
Как получить' c' – hofmeister
Почему.? вы даже бросаете? 'Visible' определен в' Control', нет необходимости бросать в 'TextBox'. Если вы производите, чтобы увидеть, является ли' c' 'TextBox', тогда просто проверьте, прежде чем пытаться присвоить значение to 'Visible':' if (c is TextBox) {c.Visible = false;} '. Если' c' является 'null', то это, очевидно, не' TextBox', и вы должны продолжить итерацию (я предполагаю 'c 'происходит от' foreach' ... много угадывания здесь, на ваш вопрос отсутствует какая-то информация) – InBetween