До сих пор, как разработчик .net, я интенсивно использовал формы mdi для отображения определенных «пунктов меню», таких как, например, «модуль 1», «модуль 2» и т. Д.
Я делал это следующим образом:
- создать родительскую форму с установленным значением true для isMdiContainer
- создать полосу меню в контейнере mdi
- создать дочернюю форму, реализующую синглтон, чтобы форма отображалась только один раз
- Добавьте что-то вроде следующего кода в контейнер mdi:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Myapp
{
public partial class MdiContainer : Form
{
private module1 Module1Window;
private module2 Module2Window;
private module3 Module3Window;
public FormContainer()
{
InitializeComponent();
this.Module1Window = modul1.getInstance();
this.Module1Window.MdiParent = this;
this.Module2Window = modul2.getInstance();
this.Module2Window.MdiParent = this;
this.Module3Window = modul3.getInstance();
this.Module3Window.MdiParent = this;
this.Module1Window.Show();
}
private void module1ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Module3Window.Hide();
this.Module2Window.Hide();
this.Module1Window.Show();
}
private void module2ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Module1Window.Hide();
this.Module3Window.Hide();
this.Module2Window.Show();
}
private void module3ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Module1Window.Hide();
this.Module2Window.Hide();
this.Module3Window.Show();
}
}
}
Теперь это, очевидно, работает нормально. Но это боль, чтобы поддерживать. Каждый раз, когда я хочу добавить другую дочернюю форму, я должен:
- агрегат Singleton
- создать соответствующее свойство в контейнере mdi
- получить экземпляр и установить родителя mdi
- Скрыть новую форму при нажатии других кнопок
- Показать форму и скрыть все остальные формы при нажатии соответствующей кнопки
Какой более элегантный или, скажем так, эффективный подход к архивированию этого?