ダウンロード サンプルファイル(C#) (185.1 KB)
ダウンロード サンプルファイル(VB) (202.7 KB)
これでひとまず表示はできましたが、MDIでは子フォームの管理が重要となります。子フォームを自動的に並べて表示するには、System.Windows.Forms.FormクラスのLayoutMdiメソッドを使用します。
また、子フォームの一覧を表示するメニューを作るには、System.Windows.Forms.MenuStripオブジェクトのMdiWindowListItemプロパティにSystem.Windows.Forms.ToolStripMenuItemオブジェクトのインスタンスを指定します。子フォームの管理を最低限だけ行うサンプルプロジェクトLayoutMdiSampleのコードを掲載しますので、コードをよく見てください。
using System;
using System.Windows.Forms;
static class LayoutMdiSample
{
static void Main()
{
//---------------------------------親フォームを作成---------------------------------
Form parent = new Form();
parent.Text = "親フォーム";
parent.IsMdiContainer = true;
parent.WindowState = FormWindowState.Maximized;
//-------------------------------各種メニューを作成-------------------------------
//子フォームの表示方法を指定するメニュー
ToolStripMenuItem WindowLayoutMenu = new ToolStripMenuItem();
WindowLayoutMenu.Name = "WindowLayoutMenu";
WindowLayoutMenu.Text = "ウィンドウの表示";
WindowLayoutMenu.AutoSize = true;
//子フォームを重ねて表示するメニュー
ToolStripMenuItem CascadeMenu = new ToolStripMenuItem();
CascadeMenu.Name = "CascadeMenu";
CascadeMenu.Text = "重ねて表示";
CascadeMenu.AutoSize = true;
CascadeMenu.Click += delegate {
parent.LayoutMdi( MdiLayout.Cascade );
};
//子フォームを垂直に並べて表示するメニュー
ToolStripMenuItem TileVerticalMenu = new ToolStripMenuItem();
TileVerticalMenu.Name = "TileVerticalMenu";
TileVerticalMenu.Text = "垂直に並べて表示";
TileVerticalMenu.AutoSize = true;
TileVerticalMenu.Click += delegate {
parent.LayoutMdi( MdiLayout.TileVertical );
};
//子フォームを水平に並べて表示するメニュー
ToolStripMenuItem TileHorizontalMenu = new ToolStripMenuItem();
TileHorizontalMenu.Name = "TileHorizontalMenu";
TileHorizontalMenu.Text = "水平に並べて表示";
TileHorizontalMenu.Click += delegate {
parent.LayoutMdi( MdiLayout.TileHorizontal );
};
//子フォームを最小表示状態で並べて表示する(子フォームをアイコン化する)メニュー
ToolStripMenuItem ArrangeIconsMenu = new ToolStripMenuItem();
ArrangeIconsMenu.Name = "ArrangeIconsMenu";
ArrangeIconsMenu.Text = "最小表示状態のフォームを並べる";
ArrangeIconsMenu.AutoSize = true;
ArrangeIconsMenu.Click += delegate {
parent.LayoutMdi( MdiLayout.ArrangeIcons );
};
//子フォームの一覧を表示するメニュー
ToolStripMenuItem WindowMenu = new ToolStripMenuItem();
WindowMenu.Name = "WindowMenu";
WindowMenu.Text = "ウインドウ";
WindowMenu.AutoSize = true;
//全てのメニューを持つメインメニュー
MenuStrip MainMenu = new MenuStrip();
MainMenu.Name = "MainMenu";
//--------------------------------各種メニューを設定--------------------------------
WindowLayoutMenu.DropDownItems.AddRange( new ToolStripItem[ ] {
CascadeMenu, TileVerticalMenu, TileHorizontalMenu, ArrangeIconsMenu
} );
MainMenu.Items.AddRange( new ToolStripItem[ ] {
WindowLayoutMenu, WindowMenu} );
MainMenu.MdiWindowListItem = WindowMenu;
parent.MainMenuStrip = MainMenu;
parent.Controls.Add( MainMenu );
//---------------------------------子フォームを作成---------------------------------
Form child = new Form();
child.Text = "子フォーム1";
child.MdiParent = parent;
child.Show();
Form child1 = new Form();
child1.Text = "子フォーム2";
child1.MdiParent = parent;
child1.Show();
Form child2 = new Form();
child2.Text = "子フォーム3";
child2.MdiParent = parent;
child2.Show();
//-------------------------------------実行開始-------------------------------------
Application.EnableVisualStyles();
Application.Run( parent );
}
}

サンプルを実行して分かりにくいのがLayoutMdi( MdiLayout.ArrangeIcons )だと思います。MdiLayout.ArrangeIconsが指定された場合は、「最小表示になっているフォーム」のみ画面の隅で整列されます。そのため、最小表示にしていないフォームは整列しません。一度サンプルで、複数のフォームを最小表示してから実行してみてください。
これで基本的なMDIアプリケーションについての解説は終わりです。サンプルを触っていると、細かい点で気になるところがあると思いますが、仮想ネットワークの話題とは関係ないのでひとまず気にしないでください。
次項からはGraffitiを実装するために必要となる、.NETのグラフィックプログラミング「GDI+(Graphical Device Interface)」の解説を始めます。
この記事は参考になりましたか?
- 仮想ネットワークの実装で学ぶTCP/IP連載記事一覧
-
- 仮想ネットワーク実装でTCP/IPを学ぼう(7) ― GDI+と独自プロトコルの定義
- 仮想ネットワーク実装でTCP/IPを学ぼう(6) ― セキュリティの基礎と仮想ネットワーク...
- 仮想ネットワーク実装でTCP/IPを学ぼう(5) ― アプリケーション層の勘所
- この記事の著者
-
インドリ(インドリ)
分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
