解説

実例で学ぶWindowsプログラミング

第1回 MDI型Windowsアプリケーションの基礎開発

デジタルアドバンテージ
2004/11/10
Page1 Page2 Page3 Page4

MDIアプリケーションの実装

 先ほどWindowsアプリケーションの「Kokyaku」プロジェクトを作成したが、これがMDIアプリケーションのメイン・ウィンドウとなる。プロジェクトの新規作成によりひな形として自動生成されたWindowsフォームを、MDIアプリケーションのメイン・ウィンドウに変更するには、[IsMdiContainer]プロパティを「True」に設定変更するだけだ。

 さらにここで、メイン・ウィンドウのファイル名を「MainWindow.cs」に変更し、次のプロパティ設定を行おう。

  • [(Name)]プロパティ:「MainWindow
  • [Text]プロパティ:「顧客.NET
  • [Size]プロパティ:「580, 480

 次の画面は、これらの設定を実際に行っているところである。

MDIアプリケーションのメイン・ウィンドウのプロパティ設定
VS.NETが生成したWindowsフォームのひな形をMDIアプリケーションのメイン・ウィンドウに変更するためにプロパティ設定を行っているところ。
  Windowsフォームのファイル名を「Form1.cs」から「MainWindow.cs」に変更する。
  [プロパティ]ウィンドウで、[IsMdiContainer]プロパティを「True」に設定変更すると、MDIアプリケーションのメイン・ウィンドウとなる。
  [(Name)]プロパティの値を「MainWindow」に変更する。またこの画面上には表示されていないが、[Text]プロパティを「顧客.NET」に、[Size]プロパティを「580, 480」にそれぞれ設定変更する。

 さらに、「MainWindow.cs」ファイル内のコードを次のように修正する。

  • 修正前:Application.Run(new Form1());
  • 修正後:Application.Run(new MainWindow());

 以上で、MDIアプリケーションのメイン・ウィンドウの原型は完成だ。次に、このメイン・ウィンドウにメニュー・バーとステータス・バーを追加する。

■メニュー・バーとステータス・バーの追加

 メニュー・バーやステータス・バーは、[ツールボックス]ウィンドウにそれぞれ、MainMenuコントロール、StatusBarコントロールとして登録されているので、これらのコントロールをメイン・ウィンドウのフォーム上にドラッグ&ドロップすれば追加できる。なお、追加したこれらのコントロールの名前は、IDEが自動的に決定した「mainMenu1」「statusBar1」のままにする。

 次の画面は実際にメニュー・バーとステータス・バーをフォーム上に追加したところだ。

メニュー・バーとステータス・バーのメイン・ウィンドウへの追加
[ツールボックス]ウィンドウにあるMainMenuコントロールとStatusBarコントロールをメイン・ウィンドウのフォーム上にドラッグ&ドロップすれば、フォームにメイン・メニューとステータス・バーを追加できる。
  MainMenuコントロールをフォーム上にドラッグ&ドロップする。これにより、フォームの上部と、フォーム・デザイナ下部のコンポーネント表示領域にMainMenuコントロールのオブジェクトが表示されるようになる。本稿では、このコントロールの名前(つまり[(Name)]プロパティ)はIDEが自動生成した「mainMenu1」のままにする。
  StatusBarコントロールをフォーム上にドラッグ&ドロップすると、StatusBarコントロール・オブジェクトがフォーム下部にドッキングされた状態(つまり、コントロールのDocプロパティがBottomに設定された状態)で貼り付けられる。本稿では、このコントロールの名前はIDEが自動生成した「statusBar1」のままにする。さらに、StatusBarコントロール・オブジェクトの[Text]プロパティを「ready」と設定変更する。
  メニュー・バー上のメニュー項目でテキストを入力すると、その項目のテキスト(=[Text]プロパティ)に入力される。メニュー項目の詳細は後述するが、すべてのメニュー項目でこの作業を行う。
  テキスト入力を行ったすべてのメニュー項目は、その名前(=[(Name)]プロパティ)も同時に設定する。この例では、「menuItemWindow」という名前を設定している。

 そして、メニュー・バーのメニュー項目としては、次の表のものを入力した。

親項目
子項目
名前 テキスト 名前 テキスト
menuItemFile ファイル(&F) menuItemStartMenu スタート メニュー(&M)
-
menuItemClose 終了(&X)
menuItemWindow ウィンドウ(&W) menuItemCascade 重ねて表示(&C)
menuItemTileHorizontal 上下に並べて表示
menuItemTileVertical 左右に並べて表示(&V)
-
menuItemAllClose すべて閉じる(&A)
menuItemHelp ヘルプ(&H) menuItemAboutBox バージョン情報(&A)...
メニュー・バーに追加したメニュー項目
メニュー・バーに追加されるメニュー項目の実体は、System.Windows.Forms名前空間のMenuItemオブジェクトである。表中の「名前」は、このオブジェクトの[(Name)]プロパティのことで、テキストは[Text]プロパティを意味する。

 これらのほとんどのメニュー項目の内容は、Windowsアプリケーションでは一般的なものばかりなのであらためて説明する必要はないだろう。「スタート メニュー」というメニュー項目は通常は見慣れないものだが、これは業務処理を実行するメニュー画面を表示するための項目で、次回で詳しく解説する。

 上の画面や表のテキストにある、これらのメニュー項目で注意してほしいのは、アンダーラインが記述された英数字である。例えば「ウィンドウ(W)」というテキストの中には「W」という英数字があるが、これはアクセス・キーと呼ばれる機能を設定したものだ。英数字に対してこのアクセス・キーを割り当てるには、「&W」のように、英数字の前にアンパサンド(&)を追加するだけである。アクセス・キーは、大文字のアルファベット、もしくは数字で表記し、その文字を半角の丸カッコで囲むのが慣例となっている。例えば、「W」というアクセス・キーは、「(&W)」と記述する。アクセス・キーの詳細は、.NET TIPS「Windowsアプリケーションでアクセス・キーを割り当てるには?」を参照してほしい。

 メニュー項目を分離するライン(以降、分離ライン)は、メニュー項目として「-」(半角のハイフン)を入力すれば設定できる。実際に上記のメニュー項目では、「左右に並べて表示」というメニュー項目と「すべて閉じる」というメニュー項目の間に分離ラインを設定している。

 上記のメニュー項目の(表の)「バージョン情報(&A)...」というテキストにある「...」は、このメニューを実行すると、何らかのダイアログなどが表示されることを意味する。これもWindowsアプリケーションの慣例である。ちなみに、「バージョン情報」というメニュー項目に限っては「...」が省略されることも多い。

 最後にメニュー・バーをフォームに結び付けるために、フォームの[Menu]プロパティに「mainMenu1」を設定する。これにより、実際にフォームにメニュー・バーが組み込まれる(ちなみにステータス・バーは、何の設定も行うことなく、これまでの実装内容だけで組み込まれる)。また、[ウィンドウ]メニュー項目(=menuItemWindowメニュー項目)の[MdiList]プロパティを「True」に設定変更する。これにより、メニュー・バーの[ウィンドウ]の下に、表示中の子ウィンドウがリスト表示されるようになる。

 以上で、メニュー・バーとステータス・バーの追加は完了である。

■子ウィンドウの追加

 次にメニュー項目にある処理を実装したいが、MDIのメイン・ウィンドウだけで、子ウィンドウが1つもないとそれらの実装状況を確認するのに不都合だ(例えば、子ウィンドウを並べ替える処理を実装しても、子ウィンドウが存在しなければ並べ替えることは不可能である)。そこで一時的な仮のウィンドウとして、次の3つのウィンドウ(のソース・ファイル)を追加してみよう。

  • 「StartMenuWindow.cs」(次回使用する)
  • 「Form1.cs」(一時的な仮ウィンドウ)
  • 「Form2.cs」(一時的な仮ウィンドウ)

 これらのウィンドウを追加する手順は、次の画面のとおりだ。

[新しい項目の追加]ダイアログによるWindowsフォームの追加
[新しい項目の追加]ダイアログを使って、新たなWindowsフォーム(この例では「StartMenuWindow.cs」)を追加する。
  VS.NET IDEの[ソリューション エクスプローラ]にある「Kokyaku」プロジェクトを右クリックしてコンテキスト・メニューを表示し、そのメニューから[追加]−[新しい項目の追加]を選択すると、[新しい項目の追加]ダイアログが表示される。このダイアログから新たなWindowsフォームを追加できる(本稿の例では、前述の「StartMenuWindow.cs」「Form1.cs」「Form2.cs」の3つを追加する)。
  [テンプレート]から[Windows フォーム]を選択する。
  [ファイル名]欄に、Windowフォームのファイル名(この例では「StartMenuWindow.cs」)を記入する。このファイル名から拡張子(この例では「.cs」)を除いたものが、クラス名(この例では「StartMenuWindow」)として使われる。
  [開く]ボタンをクリックすると、新しいWindowsフォームが新規作成される。

 子ウィンドウが用意できたら、メニュー項目の処理を実装していこう。


 INDEX
  解説:実例で学ぶWindowsプログラミング
  第1回 MDI型Windowsアプリケーションの基礎開発 
    1.本連載で開発するWindowsアプリケーションについて
    2.MDIアプリケーション開発の準備
  3.MDIアプリケーションへのコントロールの追加
    4.MDIアプリケーションのメニュー項目処理の実装
 
インデックス・ページヘ  「解説:実例で学ぶWindowsプログラミング」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH