MDI

[Fedora 13]

MDI のアプリケーションを作るための雛形になるようなサンプルです。


MDI (Multiple Document Interface)

GUI アプリケーションで、MDI を使うかどうかは、用途に応じて検討しなければなりませんが、とりあえず MDI のアプリケーションを作るための雛形になるようなサンプルが欲しかったので MSDN の情報を参考に作りました。メニューには、MenuStrip コントロールを使っています。

List: MdiTest.cs

using System;
using System.Drawing;
using System.Windows.Forms;

namespace bitWalk
{
    class Program
    {
        static void Main ()
        {
            MdiTest w = new MdiTest ();
            Application.Run (w);
        }
    }

    public class MdiTest : Form
    {
        public int winChildCount = 0;
        public string winChildTitle = "Form";

        protected MenuStrip ms;

        protected ToolStripMenuItem menuFile;
        protected ToolStripMenuItem menuFileNew;
        protected ToolStripMenuItem menuFileExit;

        protected ToolStripMenuItem menuWin;

        // Constructor
        public MdiTest ()
        {
            this.Text = "MDI テスト";
            this.ClientSize = new Size (300, 300);
            
            // Make the Form an MDI parent.
            this.IsMdiContainer = true;
            
            // MenuStrip コントロール
            ms = new MenuStrip ();
            // 「ファイル」メニュー
            menuFile = new ToolStripMenuItem ("ファイル(&F)");
            ((ToolStripDropDownMenu)(menuFile.DropDown)).ShowImageMargin = false;
            ((ToolStripDropDownMenu)(menuFile.DropDown)).ShowCheckMargin = false;
            // 「ファイル」→「新規」メニュー
            menuFileNew = new ToolStripMenuItem ("新規(&N)", null, menuFileNew_Click);
            menuFile.DropDownItems.Add (menuFileNew);
            // 「ファイル」→「終了」メニュー
            menuFileExit = new ToolStripMenuItem ("終了(&X)", null, menuFileExit_Click);
            menuFile.DropDownItems.Add (menuFileExit);
            
            // 「ウィンドウ」メニュー
            menuWin = new ToolStripMenuItem ("ウィンドウ(&W)");
            ((ToolStripDropDownMenu)(menuWin.DropDown)).ShowImageMargin = false;
            ((ToolStripDropDownMenu)(menuWin.DropDown)).ShowCheckMargin = true;
            
            // Assign the ToolStripMenuItem that displays the list of child forms.
            ms.MdiWindowListItem = menuWin;
            
            // Add the window ToolStripMenuItem to the MenuStrip.
            ms.Items.Add (menuFile);
            ms.Items.Add (menuWin);
            
            // Dock the MenuStrip to the top of the form.
            ms.Dock = DockStyle.Top;
            
            // The Form.MainMenuStrip property determines the merge target.
            this.MainMenuStrip = ms;
            
            // Add the MenuStrip last.
            // This is important for correct placement in the z-order.
            this.Controls.Add (ms);
        }

        // generate child window in MDI
        protected void menuFileNew_Click (object sender, EventArgs e)
        {
            Form f = new Form ();
            f.MdiParent = this;
            winChildCount++;
            f.Text = winChildTitle + "-" + winChildCount.ToString ();
            f.Show ();
        }
        // Exit
        protected void menuFileExit_Click (object sender, EventArgs e)
        {
            Close ();
        }
    }
}
// END PROGRAM

gmcs コマンドを使ってビルドします。

$ gmcs -pkg:dotnet -target:winexe MdiTest.cs
$ mono MdiTest.exe

以下に Linux (Gnome) と Windows XP で実行した例を示しました。(Wine / .NET Framework 2.0 の環境では実行できませんでした。)

なお Linux / Mono の環境では、"新規(&N)" など、ドロップダウンメニューにおける Alt キーによるショートカットが効きませんでした。"ファイル(&F)" など、MenuStrip のメニューアイテムは、Linux、Windows どちらでもショートカットキーが使えました。

Linux 上で実行した MdiTest.exe
Windows XP 上で実行した MdiTest.exe
(Linux)
(Windows XP)

MdiTest.exe の実行例

MDI のアプリケーションを作るための雛形にしては、足りない機能がたくさんありますが、随時、情報を更新していく予定です。

ページ先頭に戻る

参考サイト

MenuStrip クラス (System.Windows.Forms)
MdiTest.cs は、ここで紹介されているサンプルをベースにしています。
ページ先頭に戻る
(C) 2009 - 2017 Fuhito Suguri
クリエイティブ・コモンズ・ライセンス
This site by Fuhito Suguri is licensed under a Creative Commons 表示 - 継承 3.0 Unported License.
Ads by Sitemix