![]()  | 
連載:アップグレード・ウィザードに学ぶVB 6→VB 2005第5回 .NETではこう変わる! VB 6のMDIフォームとメニューグレープシティ株式会社 八巻 雄哉2007/05/15  | 
| 
 | 
| 
 Back Issue 
 | 
||||||||
  | 
今回取り上げる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参照)。
そのほかのメニュー項目については、以下の表のとおりにキャプションと名前だけを設定しています。
  | 
||||||||||||||||||
| 各メニュー項目のキャプションと名前 | ||||||||||||||||||
そしてMDIForm1のコードが下記のリスト1になります。選択されたメニュー項目に従って、いろいろなウィンドウ操作をすべてのMDI子フォームに対して一括して実行するプログラムとなっています。
  | 
|
| リスト1 MDIForm1のコード(VB 6) | 
このサンプル・プロジェクトの実行画面は、下記の図3のようになります。
![]()  | 
| 図3 プロジェクトの実行画面(VB 6アプリケーション) | 
では、アップグレード・ウィザードを使ってこのプロジェクトをVisual Basic 2005(以下VB 2005)のプロジェクトに変換し、ポイントとなる部分について解説していきましょう。
| INDEX | ||
| アップグレード・ウィザードに学ぶVB 6→VB 2005 | ||
| 第5回 .NETではこう変わる! VB 6のMDIフォームとメニュー | ||
| 1.VB 6のMDIフォームとメニュー | ||
| 2.VB 2005にMDIFormオブジェクト/メニュー・エディタは存在しない | ||
| 3.Option Strictステートメント/VB 6の定数/MdiChildrenプロパティ | ||
| 「アップグレード・ウィザードに学ぶVB 6→VB 2005」 | 
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える 
 
  | 
 |








