【C#/WinForms】MDIの子フォーム最大化時のメニューバーに表示されるアイコンを消す方法

この記事は約3分で読めます。

自作エディタがMDIの時に、フォームのタイトルバーとメニューバーに同じアイコンが表示されるのが気にいらなかったので消す方法を調べた内容です。

MDI の子フォームを最大化するとメニューバーに子フォームのアイコンと最小化、元に戻す、閉じるの4つのアイコンが追加されるので、その際に子フォームのアイコンを消すことで非表示にできます。逆にアイコンを変更するってこともできます。

サンプルソース

子フォームで制御します。WM_GETTEXT と WM_MDIACTIVATE メッセージ発生時に親フォームのメニューバーの1個目のアイコンを消しています。

ChildForm.cs

using System.Windows.Forms;

namespace Test {
    public partial class ChildForm : Form {

        public ChildForm() {
            InitializeComponent();
        }

        protected override void WndProc(ref Message msg) {
            base.WndProc(ref msg);

            const int WM_GETTEXT = 0xD;
            const int WM_MDIACTIVATE = 0x222;

            if ((msg.Msg == WM_GETTEXT || msg.Msg == WM_MDIACTIVATE)) {
                if (this.MdiParent.MainMenuStrip != null &&
                    this.MdiParent.MainMenuStrip.Items.Count == 10) {
                    // メニューのインデックス
                    // 0:子フォームのアイコン
                    // 1:ファイル
                    // 2:編集
                    // 3:表示
                    // 4:ツール
                    // 5:ウィンドウ
                    // 6:ヘルプ
                    // 7:最小化
                    // 8:元に戻す
                    // 9:閉じる
                    this.MdiParent.MainMenuStrip.Items.RemoveAt(0);
                }
            }
        }
    }
}

実行結果

子フォームを最大化してもメニューバーのアイコンは表示されなくなります。

おわりに

現在自作エディタは TDI 形式に変更しました。MDI 形式でアプリ作成されている方の参考になれば幸いです。

コメント

タイトルとURLをコピーしました