解説

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

第2回 継承と属性プログラミングで実現するRAD開発 

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

拡張Windowsコントロールの利用方法

 今回作成したような独自コントロールをWindowsアプリケーションなどで利用するには、事前準備として、そのコントロールが実装されたコントロール・ライブラリ(DLLファイル)をプロジェクトの「参照」に追加しなければならない。

■コントロール・ライブラリの参照の追加

 プロジェクトの参照に追加するには、次の画面の手順を実行する。

プロジェクトに対するコントロール・ライブラリの参照の追加
前回作成したWindowsアプリケーション・プロジェクト「Kokyaku」に対して、今回作成したコントロール・ライブラリ(DLLファイル)の「参照」を追加しているところ。
  [ソリューション エクスプローラー]ウィンドウのコントロール・ライブラリを利用したいプロジェクト(この例では「Kokyaku」)のフォルダ上で右クリックしてコンテキスト・メニューを表示し、そこから[参照の追加]を選択する。これにより、[参照の追加]ダイアログが表示される。
  [参照の追加]ダイアログで[参照]ボタンをクリックすると[コンポーネントの選択]ダイアログ([ファイルを開く]ダイアログと同じもの)が表示されるので、そこで追加したいコントロール・ライブラリ(DLLファイル。本稿の例では、「C:\Insider.NET\Kokyaku.NET\bin\Debug\Insiders.Windows.Forms.dll」)を選択する。
  選択してコンポーネント(DLLファイル。この例では「Insiders.Windows.Forms.dll」)が表示される。
  [OK]ボタンをクリックして参照の追加を確定する。

 この参照の追加により、プロジェクト内で独自に作成したコントロールが利用できるようになった。しかし、VS.NET IDEのフォーム・デザイナ上でこれらのコントロールを使うには、さらに[ツールボックス]ウィンドウにこれらのコントロールを登録する必要がある。

■ツールボックスへの独自コントロールの追加

 ツールボックスに独自コントロールを追加するには、次の画面の手順を行う。

[ツールボックス]ウィンドウへの独自コントロールの登録
VS.NET IDEのWindowsフォーム・デザイナ上でこれらのコントロールを使うには、さらに[ツールボックス]ウィンドウにこれらのコントロールを登録する必要がある。
  [ツールボックス]ウィンドウ上で右クリックしてコンテキスト・メニューを表示し、そこから[アイテムの追加と削除]を選択する。これにより、[ツールボックスのカスタマイズ]ダイアログが表示される。
  [参照]ボタンをクリックして[開く]ダイアログを表示し、そのダイアログで先ほどの「参照」で追加したコントロール・ライブラリ(本稿の例では、「C:\Insider.NET\Kokyaku.NET\bin\Debug\Insiders.Windows.Forms.dll」)を選択する。
  .NET Frameworkコンポーネントとして、コントロール・ライブラリ内の独自コントロールが、チェック・ボックスにチェックが入って選択された状態で追加される。
  [OK]ボタンをクリックして、追加するコントロールを確定する。
  独自に追加したコントロール(この例では、MenuButtonコントロールとMenuPanelコントロール)が[ツールボックス]ウィンドウ上に表示される。

■独自コントロールを使ったプログラムレスRAD開発

 後は通常のWindowsフォームの作成手順と同じだ。[ツールボックス]ウィンドウから必要なコントロールやコンポーネントをフォーム上にドラッグ&ドロップし、[プロパティ]ウィンドウでそれらのコントロールやコンポーネントのプロパティを変更する。

独自コントロールのWindowsフォーム上への配置
[ツールボックス]ウィンドウから必要なコントロールやコンポーネントをフォーム上にドラッグ&ドロップする。

 本サンプル・アプリケーションにおける、それぞれのコントロールのプロパティ設定については割愛する。詳しくはダウンロードしたサンプル・プログラムを参照してほしい。

 今回のプロパティ設定の注意点としては、MDIの子ウィンドウのAutoScrollプロパティの設定についてである。このプロパティをTrueにすると、[Ctrl]+[Tab]キーでMDI子ウィンドウを切り替えるときに、子ウィンドウの表示がおかしくなるというバグがあるようだ。筆者が試した限りでは、子ウィンドウのAutoScrollMinSizeプロパティを指定するとこの問題を解決できた。

■ユーティリティ・クラスの導入

 スタート・メニュー画面のフォーム上に配置したボタンをクリックすると、業務処理を実行するためのMDI子ウィンドウを起動する処理を実行する。これは、前回解説した「メニュー項目の処理の実装」とまったく同じ処理である。つまり、今回作成したスタート・メニュー画面と前回作成したメイン・ウィンドウ画面にまった同じ処理が存在することになる。

 このように複数のクラスに共通する処理がある場合は、その共通処理を新たなクラスに切り出してまとめておく。このようなクラスは一般的に「ユーティリティ・クラス」と呼ばれる。

 具体的には次のようなコードのクラス(本稿では「MenuUtil.cs」というファイル)を新規作成する。

using System;
using System.Windows.Forms;

namespace Kokyaku
{
  public class MenuUtil
  {
    private MenuUtil()
    {
    }
    private static void RunMenu(Form mdiChildForm, Form mdiParentForm)
    {
      mdiChildForm.MdiParent = mdiParentForm;
      if (mdiParentForm.MdiChildren.Length <= 1)
      {
        mdiChildForm.WindowState = FormWindowState.Maximized;
      }
      mdiChildForm.Show();
      mdiChildForm.Update();
      mdiChildForm.Activate();
    }

    public static void RunStartMenu(Form mdiParentForm)
    {
      RunMenu(StartMenuWindow.GetInstance(), mdiParentForm);
    }
    ……中略……
  }
}
複数のクラス間に共通する処理をまとめたユーティリティ・クラス(C#)
複数のクラス(この例では、メイン・ウィンドウ画面とスタート・メニュー画面)で共通する処理がある場合、その共通処理を新たなユーティリティ・クラスとして切り出すことは定石だ。

 ユーティリティ・クラスでは通常、抽出された共通処理は静的(static)なメソッドとしてクラスに追加する。このようなユーティリティ・クラスは、外部でインスタンス生成されないように、そのコンストラクタのアクセス修飾子に「private」を指定しておこう。

 上記のユーティリティ・クラスを作成することにより、前回実装したスタート・メニュー画面の呼び出し処理は次のようなコードとなる。

private void menuItemStartMenu_Click(object sender, System.EventArgs e)
{
  MenuUtil.RunStartMenu (this);
}
スタート・メニュー画面の呼び出し処理のコード(C#)

 今回作成したサンプル・アプリケーションでは、ここまでに解説した実装内容のほか、メニュー・バーの項目追加なども実装した。しかし、すべてを解説することは不可能だったので、細かい部分の説明は割愛した。

 今回はアプリケーションの業務処理機能にアクセスするためのメニュー操作のユーザー・インターフェイスを作成した。その作成を通して、既存のWindowsコントロールを継承したコントロールの作成方法と、そのコントロールの[プロパティ]ウィンドウ上の表示制御を行う属性の指定方法についても説明した。[プロパティ]ウィンドウを活用したRAD型のアプリケーション開発を始めるための取り掛かりくらいにはなれれば筆者として嬉しい。

 次回は、顧客管理アプリケーションのデータ登録機能である「顧客データの登録画面」を構築する。よって次回では、引き続き、Windowsアプリケーションのユーザー・インターフェイスの構築手法を解説する。代表的なWindowsコントロールの使い方や、今回説明できなかったユーザー・コントロールについて説明する予定だ。それらの解説が終わり次第、データ・アクセス処理などの実装に入っていく。次回もお楽しみに。End of Article


 INDEX
  解説:実例で学ぶWindowsプログラミング
  第2回 継承と属性プログラミングで実現するRAD開発
    1.スタート・メニュー画面の構築について
    2.拡張Windowsコントロールの作成
    3.属性プログラミングの実践
  4.拡張Windowsコントロールの利用方法

インデックス・ページヘ  「解説:実例で学ぶ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