|
.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アプリケーションのサンプル・プログラムを次に示す。
// createctrl.cs
using System;
using System.Reflection;
using System.Drawing;
using System.Windows.Forms;
class CreateControl {
static void Main() {
string ctrlName = "System.Windows.Forms.TextBox";
Assembly a = typeof(Control).Assembly;
Control ctrl = (Control)a.CreateInstance(ctrlName);
ctrl.Text = ctrlName;
ctrl.Location = new Point(30, 30);
ctrl.Width = 200;
Form myform = new Form();
myform.Controls.Add(ctrl);
Application.Run(myform);
}
}
// コンパイル方法:csc createctrl.cs
|
|
コントロールのクラス名からコントロールを作成するC#のサンプル・プログラム(createctrl.cs) |
|
' createctrl.vb
Imports System
Imports System.Reflection
Imports System.Drawing
Imports System.Windows.Forms
Class CreateControl
Shared Sub Main()
Dim ctrlName As String = "System.Windows.Forms.TextBox"
Dim a As [Assembly] = GetType(Control).Assembly
Dim ctrl As Control = CType(a.CreateInstance(ctrlName), Control)
ctrl.Text = ctrlName
ctrl.Location = new Point(30, 30)
ctrl.Width = 200
Dim myform As Form = new Form()
myform.Controls.Add(ctrl)
Application.Run(myform)
End Sub
End Class
' コンパイル方法:vbc /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll createctrl.vb
|
|
コントロールのクラス名からコントロールを作成するVB.NETのサンプル・プログラム(createctrl.vb) |
|
このサンプル・プログラムの実行画面は次のようになる。
|
サンプル・プログラムの実行画面 |
テキストボックス・コントロールでは、Textプロパティにセットした値は、コントロール内に表示される文字列となる。 |
本稿の方法では、リフレクションによるメソッドやプロパティの操作を行わずに、作成したオブジェクトをControlクラスへキャストし、Controlクラスにあるメソッドやプロパティでコントロールの操作を行う。このため、コントロールに対して可能な操作はその範囲に限られる。
カテゴリ:Windowsフォーム 処理対象:コントロール
使用ライブラリ:Assemblyクラス(System.Reflection名前空間)
使用ライブラリ:Controlクラス(System.Windows.Forms名前空間)
|
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間