○C# ウインドウコントロールライブラリをプラグインのように利用する
ウインドウコントロールライブラリを動的にロードして
クラスのメソッドを呼び、プラグインのようにタブコントロールに追加する
■動的にロードされるコントロールライブラリ
namespace WindowsControlLibrary1
{
public class UserControl1 : System.Windows.Forms.UserControl
{
private System.Windows.Forms.Form master;
//呼ばれるプロパティ
public System.Windows.Forms.Form bar
{
get
{
return master;
}
set
{
master = value;
}
}
//呼ばれるメソッド
public void foo(string str)
{
textBox1.Text=str;
}
//ロード元のメソッドを呼ぶ
private void button1_Click(object sender, System.EventArgs e)
{
System.Reflection.MethodInfo mi;
mi=master.GetType().GetMethod("baz");
Object[] paramlist = {"Hello"};//メソッドに渡す値
mi.Invoke(master,paramlist);//メソッドを呼ぶ
}
}
}
■上記コントロールライブラリを動的にロードする
System.Reflection.MethodInfo mi;
System.Reflection.PropertyInfo pi;
object obj;
private void init()
{
//コントロールライブラリをロードし、関数とプロパティを取得
System.Windows.Forms.TabPage tabPagePos;
tabPagePos = new System.Windows.Forms.TabPage();
tabPagePos.Text ="tabPage2";
System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom("WindowsControlLibrary1.dll");
Type t=asm.GetType("WindowsControlLibrary1.UserControl1");
obj=Activator.CreateInstance(t);
mi = t.GetMethod("foo");//関数名fooを探す
pi=t.GetProperty("bar");//プロパティmasterを探す
//タブコントロールに追加
tabPagePos.Controls.Add((System.Windows.Forms.UserControl)obj);
tabControl1.Controls.Add(tabPagePos);
}
private void button2_Click(object sender, System.EventArgs e)
{
//コントロールのメソッドとプロパティを呼ぶ
Object[] paramlist = {textBox1.Text };//メソッドに渡す値
mi.Invoke(obj,paramlist);//メソッドを呼ぶ
pi.SetValue(obj,this,null);//プロパティにthisをセット 読む場合はGetValue
//((System.Windows.Forms.Form)pi.GetValue(obj,null)).Text ="xxx";
}
//コントロールから呼ばれるメソッド
public void baz(string str)
{
this.Text =str;
}
▲トップページ
>
Visual BASIC と C#