|
.NET TIPS コントロールのクラス名からコントロール・オブジェクトを作成するには?デジタルアドバンテージ2004/06/25 |
![]() |
|
|
|
Windowsアプリケーションにおいて、テキストボックスやラベルなどコントロール・オブジェクトを、そのクラス名となる文字列を指定して作成することができる。例えばテキストボックスに対応したクラスはTextBoxクラス(System.Windows.Forms名前空間)であるが、このクラスをnewキーワードによりインスタンス化するのではなく、「System.Windows.Forms.TextBox」という文字列を指定してオブジェクトを作ることができる。
これにはまず、コントロールを示すクラスと同じアセンブリに含まれる別のクラス(ここではControlクラスを用いる)を利用して、そのアセンブリ(Assemblyオブジェクト)を取得する。このためのコードは次のようになる。
Assembly a = typeof(Control).Assembly;
次に、いま得られたAssemblyオブジェクトのCreateInstanceメソッドにより、そのアセンブリに含まれるクラスのインスタンスを作成する。このときメソッドのパラメータには、作成するインスタンスのクラス名を文字列として指定できる。指定するクラス名は、その名前空間を含んだフルネームでなければならない。
string ctrlName = "System.Windows.Forms.TextBox";
Control ctrl = (Control)a.CreateInstance(ctrlName);
このコードでは、作成したオブジェクトを各コントロールに共通な親クラスであるControlクラスにキャストしている(ここでTextBoxクラスなどにキャストしては、文字列でクラス名を指定する意味がない)。
以上のような方法を利用して作ったコントロールを持つWindowsアプリケーションのサンプル・プログラムを次に示す。
|
|
| コントロールのクラス名からコントロールを作成するC#のサンプル・プログラム(createctrl.cs) | |
|
|
| コントロールのクラス名からコントロールを作成するVB.NETのサンプル・プログラム(createctrl.vb) | |
このサンプル・プログラムの実行画面は次のようになる。
![]() |
| サンプル・プログラムの実行画面 |
| テキストボックス・コントロールでは、Textプロパティにセットした値は、コントロール内に表示される文字列となる。 |
本稿の方法では、リフレクションによるメソッドやプロパティの操作を行わずに、作成したオブジェクトをControlクラスへキャストし、Controlクラスにあるメソッドやプロパティでコントロールの操作を行う。このため、コントロールに対して可能な操作はその範囲に限られる。![]()
| カテゴリ:Windowsフォーム 処理対象:コントロール 使用ライブラリ:Assemblyクラス(System.Reflection名前空間) 使用ライブラリ:Controlクラス(System.Windows.Forms名前空間) |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



