2014-09-22 4 views

ответ

-1

Просто кнопку с событием создать Нажмите один панель установить видимый истинны и все другое множество ложно:

private void button1_Click(object sender, EventArgs e) 
{ 
    panel1.Visible = true; 
    panel2.Visible = false; 
    panel3.Visible = false; 
} 
+0

Если есть много панелей, это приведет к множеству очень повторяющихся кодов. – David

+0

Да, но это очень умно. – koca2000

+0

«Простейший» теряет свою привлекательность очень быстро, когда код необходимо поддерживать с течением времени. Если что-то очень простое, но масштабируется до чего-то очень сложного, то это вряд ли лучше, чем нечто, что немного менее просто, но остается на неизменном уровне простоты на протяжении всей жизни кодовой базы. – David

0

Вы могли бы, возможно, цикл через Controls коллекции на форме и установите все Panel элементы управления, чтобы скрыть, прежде чем отображать тот, который вы хотите. Что-то вроде:

private void HidePanels() 
{ 
    foreach (var control in Controls) 
     if (control is Panel) 
      ((Panel)control).Visible = false; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    HidePanels(); 
    panel1.Visible = true; 
} 

Это может оказаться ненадежным, если у вас есть панели, вложенные в другие элементы управления. Прошло некоторое время с тех пор, как я использовал формы, поэтому не могу сказать с большой уверенностью, насколько это возможно. Но одна вещь, которую вы может do is a явно список панелей, на которые вы хотите применить свою логику. Что-то вроде этого:

private IEnumerable<Panel> _panels; 
private IEnumerable<Panel> Panels 
{ 
    get 
    { 
     if (_panels = null) 
      _panels = new List<Panel> 
      { 
       Panel1, 
       Panel2, 
       Panel3, 
       // etc... 
      } 
     return _panels; 
    } 
} 

Затем цикл через что вместо Controls коллекции:

private void HidePanels() 
{ 
    foreach (var panel in Panels) 
     panel.Visible = false; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    HidePanels(); 
    panel1.Visible = true; 
} 

Это устранило бы любую возможность для ошибки в отливке типа, а также дать вам более четко контролировать, какие панели показать или скрыть, так как вы можете использовать панели для других вещей, не связанных с показами/скрытыми в этой операции.