連載:アップグレード・ウィザードに学ぶVB 6→VB 2005第5回 .NETではこう変わる! VB 6のMDIフォームとメニューグレープシティ株式会社 八巻 雄哉2007/05/15 |
|
|
VB 2005にMDIFormオブジェクトは存在しない
変換されたプロジェクトを見ると、まずMDIForm1がそのほかのForm1やForm2と同じFormオブジェクトになっていることが分かります(図4)。
図4 各フォームを選択したときのプロパティ・ウィンドウでの表示(VB 2005) |
MDIForm1(上)もForm1(下)もFormクラス(System.Windows.Forms名前空間)の派生クラスとして宣言されている。 |
VB 2005にMDIFormというオブジェクトやクラスは存在しません。VB 2005では、通常のFormオブジェクトにおいて、IsMdiContainerプロパティがTrueに設定されているものがMDIフォームとなります。変換されたプロジェクトのMDIForm1のIsMdiContainerプロパティをプロパティ・ウィンドウで確認すると、確かにTrueに設定されていることが分かります。
なお、VB 6の場合、MDIフォームの背景色はBackColorプロパティを設定することで変更できましたが、VB 2005ではMDIフォームの背景色を変更することはできません。Pictureプロパティを使って背景画像を設定していた場合も同様ですので注意が必要です。
一方、MDI子フォームとなる側のフォームでは、そのMDIParentプロパティに親となるMDIフォームを設定します。MDIParentプロパティはプロパティ・ウィンドウから設定することはできないので、コードから設定します。
変換されたプロジェクトでは、Windowsフォーム・デザイナによって自動生成されたコードが記述されている.Designer.vbファイル(Form1.Designer.vbなど)*にMDIParentプロパティを設定するコードが存在するのを確認できます。
| |
リスト2 自動生成されたForm1.Designer.vbファイルのコードの一部(VB 2005) | |
コンストラクタ部分にMDIParentプロパティを設定するコードが記述されている。 |
* .Designer.vbファイルはデフォルトの状態ではソリューション・エクスプローラに表示されていません。Visual Studio 2005のメニューから[プロジェクト]−[すべてのファイルを表示]を実行するか、ソリューション・エクスプローラの上部にある[すべてのファイルを表示]ボタンをクリックする必要があります。 |
このような仕様になっているため、VB 6のようにプロジェクトには1つのMDIフォームしか作成できないという制限はなく、VB 2005ではいくつでもMDIフォームを作成することができます。
VB 2005にメニュー・エディタは存在しない
VB 2005にメニュー・エディタは存在しません。通常のコントロールと同様、ツールボックスからMenuStripコントロールをフォームにドラッグ&ドロップするという操作で、フォームにメニューを追加します。
各メニューのテキスト(VB 6ではキャプション)は、フォームに表示されているメニューから直接入力することができます。そのほかの設定についてはプロパティ・ウィンドウを使って設定します。
図5 Windowsフォーム・デザイナ上に表示されるメニュー(MenuStripコントロール) |
変換されたプロジェクトのMDIForm1のメニューを見ると、各メニューのテキストは問題なくそのまま移行されているのですが、VB 6の[ウィンドウリスト]チェックボックス(WindowListプロパティ)を使って実現していたMDI子フォームの一覧をメニューとして表示する機能は移行されていません。
しかしながら、同じ機能はVB 2005のMenuStripコントロールにも用意されており、やはりプロパティ1つで簡単に実現することができます。変換されたプロジェクトの場合、MainMenu1という名前のMenuStripコントロールを選択し、プロパティ・ウィンドウからMdiWindowListItemプロパティにMenuWindowを設定します。
アップグレード・ウィザードで変換されたコード
最後に、変換されたプロジェクトのMDIForm1のコード部分について見ていきましょう。リスト1のコードを変換した結果が次のリスト3になります。
| |
リスト3 MDIForm1のコード(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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
- - PR -