Вы могли бы, возможно, цикл через 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;
}
Это устранило бы любую возможность для ошибки в отливке типа, а также дать вам более четко контролировать, какие панели показать или скрыть, так как вы можете использовать панели для других вещей, не связанных с показами/скрытыми в этой операции.
Если есть много панелей, это приведет к множеству очень повторяющихся кодов. – David
Да, но это очень умно. – koca2000
«Простейший» теряет свою привлекательность очень быстро, когда код необходимо поддерживать с течением времени. Если что-то очень простое, но масштабируется до чего-то очень сложного, то это вряд ли лучше, чем нечто, что немного менее просто, но остается на неизменном уровне простоты на протяжении всей жизни кодовой базы. – David