2009-05-15 8 views
2

オブジェクトを動的に作成してhtmlテーブルに挿入しています。オブジェクトはラベルまたはリンクボタンです。リンクボタンの場合、イベントハンドラをclickイベントに登録する必要がありますが、実際にはハンドラを追加します。コードは今のところです:C#のイベントハンドラに後でバインドできますか?

WebControl myControl; 

if _createLabel) 
{ 
    myControl = new Label(); 
} 
else 
{ 
    myControl = new LinkButton(); 
} 

myControl.ID = "someID"; 
myControl.GetType().InvokeMember("Text", BindingFlags.SetProperty, null, myControl, new object[] { "some text" }); 

if (!_createLabel) 
{ 
    // somehow do myControl.Click += myControlHandler; here 
} 

答えて

-1

あなたは簡単に行うことができます。

Control.Event + =新しいEventHandlerType(this.controlClick)。

+0

私はできません myControl.Click + = myControlHandler; WebControlはclickイベントを持たないため、コードはコンパイルされません。 –

1

これは(名前で)現在のインスタンスのメソッドを(名前で)コントロールのイベントを結合を示す:

Button btn = new Button(); 
EventInfo evt = btn.GetType().GetEvent("Click"); 
MethodInfo handler = GetType().GetMethod("SomeHandler", 
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); 
evt.AddEventHandler(btn, Delegate.CreateDelegate(
     evt.EventHandlerType, this, handler)); 
7

以下が動作する:

LinkButton lnk = myControl as LinkButton; 
if (lnk != null) 
{ 
    lnk.Click += myControlHandler; 
} 
+0

+1はリフレクションを使用しないためです。 –

+0

あなたのために+1、簡単な解決策を見ないために私のために-1。 –

関連する問題