○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#