|
 |
連載:アップグレード・ウィザードに学ぶVB 6→VB 2005
第5回 .NETではこう変わる! VB 6のMDIフォームとメニュー
グレープシティ株式会社 八巻 雄哉
2007/05/15 |
|
今回取り上げるVisual Basic 6.0(以下VB 6)の特殊オブジェクトは、MDIFormオブジェクトとMenuコントロールの2つです。
VB 6では、プロジェクトの中に1つだけしか追加できない特別なフォームとして「MDIフォーム」(MDIFormオブジェクト)が用意されています。MDIフォームをプロジェクトに追加し、通常のフォームのMDIChildプロパティをTrueに設定することによって、MDIフォームの子フォームとしてそのフォームが表示されるという仕様です。
一方、Menuコントロールはほかのコントロールとは異なり、ツールボックスからフォームに貼り付けることはできません。フォームのコンテキスト・メニューからメニュー・エディタを起動し、Menuコントロールの追加、設定を行います。このように、MDIFormオブジェクトとMenuコントロールはどちらも、ちょっと特殊な存在となっています。
今回の特殊オブジェクトでは、プロパティ・ウィンドウやメニュー・エディタを使わなければ設定できない項目がいくつか存在しますので、まずは変換するVB 6のプロジェクトについて簡単に説明します。
VB 6のMDIフォームとメニュー・エディタ
今回サンプルとして作成したVB 6プロジェクトは、下記の図1のように、
- 1つのMDIフォーム(MDIForm1)
- MDIChildプロパティがTrueに設定された3つのフォーム(Form1、Form2、Form3)
で構成されています。プロジェクトのスタートアップはMDIForm1です。

|
図1 プロジェクトの構成(VB 6) |
MDIForm1がMDIフォーム、Form1、Form2、Form3がフォームとなっている。3つのフォームのMDIChildプロパティは、実行時には読み取り専用であるためプロパティ・ウィンドウから設定する必要がある。 |
MDIForm1には、VB 6のメニュー・エディタを使って図2のようなメニューを設定しています。

|
図2 VB 6のメニュー・エディタによるメニューの設定 |
VB 6では、メニュー・エディタでメニューを設定することで、フォームにMenuコントロールを追加できる。 |
トップのメニューである「ウィンドウ」の項目のみ[ウィンドウリスト]チェックボックスにチェックを入れ、MDI子フォームの一覧をメニューとして表示されるように設定しています(後掲の図3参照)。
そのほかのメニュー項目については、以下の表のとおりにキャプションと名前だけを設定しています。
キャプション |
名前 |
ウィンドウ |
MenuWindow |
レイアウト |
MenuLayout |
重ねて表示 |
MenuWindowCascade |
上下に並べて表示 |
MenuWindowTileVertical |
左右に並べて表示 |
MenuWindowTileHorizontal |
最小化フォームを整列 |
MenuWindowArrangeIcons |
最小化 |
MenuWindowMinimizeAll |
元のサイズに戻す |
MenuWindowRestoreAll |
|
各メニュー項目のキャプションと名前 |
|
そしてMDIForm1のコードが下記のリスト1になります。選択されたメニュー項目に従って、いろいろなウィンドウ操作をすべてのMDI子フォームに対して一括して実行するプログラムとなっています。
Private Sub MDIForm_Load()
' 各MDI子フォームをロードします。
Load Form1
Load Form2
Load Form3
End Sub
Private Sub MenuWindowCascade_Click()
' MDI子フォームを重ねて表示します。
MDIForm1.Arrange vbCascade
End Sub
Private Sub MenuWindowTileHorizontal_Click()
' MDI子フォームを左右に並べて表示します。
MDIForm1.Arrange vbTileHorizontal
End Sub
Private Sub MenuWindowTileVertical_Click()
' MDI子フォームを上下に並べて表示します。
MDIForm1.Arrange vbTileVertical
End Sub
Private Sub MenuWindowArrangeIcons_Click()
' 最小化したMDI子フォームを整列します。
MDIForm1.Arrange vbArrangeIcons
End Sub
Private Sub MenuWindowMinimizeAll_Click()
' MDI子フォームを最小化します。
SetWindowStateAll (vbMinimized)
End Sub
Private Sub MenuWindowRestoreAll_Click()
' MDI子フォームを元のサイズに戻します。
SetWindowStateAll (vbNormal)
End Sub
Private Sub SetWindowStateAll(state As FormWindowStateConstants)
Dim currentForm As Form
' Formsコレクションを使ってすべてのフォームを取得します。
For Each currentForm In Forms
' 取得したフォームがMDIフォーム以外の場合に
' WindowStateプロパティを変更します。
If Not currentForm Is Me Then
currentForm.WindowState = state
End If
Next
End Sub
|
|
リスト1 MDIForm1のコード(VB 6) |
このサンプル・プロジェクトの実行画面は、下記の図3のようになります。

|
図3 プロジェクトの実行画面(VB 6アプリケーション) |
|
では、アップグレード・ウィザードを使ってこのプロジェクトをVisual Basic 2005(以下VB 2005)のプロジェクトに変換し、ポイントとなる部分について解説していきましょう。
業務アプリInsider 記事ランキング
本日
月間