2015-11-25 3 views
0

У меня возникла проблема и без правильного ключевого слова поиска я не смог найти ничего полезного.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, прежде чем я добавил панели.

+3

Ваш код имеет ошибки синтаксиса (например, 'HD = (Form1) Application.OpenForms Form1 [" form1]; '). Пожалуйста, измените вопрос адресовать их –

+0

Как получить' c' – hofmeister

+0

Почему.? вы даже бросаете? 'Visible' определен в' Control', нет необходимости бросать в 'TextBox'. Если вы производите, чтобы увидеть, является ли' c' 'TextBox', тогда просто проверьте, прежде чем пытаться присвоить значение to 'Visible':' if (c is TextBox) {c.Visible = false;} '. Если' c' является 'null', то это, очевидно, не' TextBox', и вы должны продолжить итерацию (я предполагаю 'c 'происходит от' foreach' ... много угадывания здесь, на ваш вопрос отсутствует какая-то информация) – InBetween

ответ

0

Это hd.default_panel.Controls.

Form1 hd = (Form1)Application.OpenForms["form1"]; 
foreach (Control c in hd.panel_default.Controls) 
{ 
    c.Visible = false; 
} 
Смежные вопросы