これまでの私の人生では、.net開発者として、mdiフォームを多用して、たとえば「モジュール1」、「モジュール2」などの特定の「メニューポイント」を表示してきました。
私はこれを次のように行っています:
- 「isMdiContainer」を「true」に設定して親フォームを作成します
- mdiコンテナにメニューストリップを作成します
- フォームが1回だけ表示されるように、シングルトンを実装する子フォームを作成します
- 次のコードのようなものを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();
}
}
}
さて、これは明らかにうまくいきます。しかし、維持するのは苦痛です。別の子フォームを追加するたびに、次のことを行う必要があります。
- シングルトンを実装する
- mdiコンテナに対応するプロパティを作成します
- インスタンスを取得し、mdiの親を設定します
- 他のボタンがクリックされたときに新しいフォームを非表示にする
- 対応するボタンがクリックされたときにフォームを表示し、他のすべてのフォームを非表示にします
これをアーカイブするためのよりエレガントな、または効率的なアプローチを言うことができますか?