2012-01-19 17 views
2

My UserControlにはさまざまなコントロールが含まれています。私はそのクリックイベントのイベントハンドラを作った。ユーザーが自分のコントロールのどこかをクリックすると、イベントハンドラが呼び出される/呼び出されるようにしたい。UserControlのイベントハンドラが起動しない

これは私のUserControlを私のWinFormsアプリケーションに追加する方法です。

private void addContact(some parameters here) 
{ 
    //This is my usercontrol 
    contactsListItem.contactsListItem contact = new contactsListItem.contactsListItem(); 

    // 
    //some codes here 
    // 

    //Adding an event handler for the click event 
    contact.Click += new EventHandler(contact_Click); 

    //Adding the UserControl to my application 
    flowLayoutPanel_contactsList.Controls.Add(contact); 
} 

contact_Click(...)イベントハンドラは、私のUserControlの背景を変更する必要があります。イベントハンドラが起動するかどうかを調べるコードにステップインしてみましたが、UserControlをどこでクリックしても起動しないことがわかりました。

私はインターネットで検索しました。代理人、購読者、出版社などの用語に遭遇しました。

UserControlのクリックイベントのイベントハンドラを起動するにはどうすればよいですか?

+1

WinformsまたはASP.NET? –

+2

windowsフォームアプリケーション。その場合は – Xel

答えて

5

あなたのユーザーコントロールの構造は何ですか? ClickイベントはWindFormsにバブリングされません。したがって、ユーザコントロール内のコントロールをクリックすると、後者はClickイベントを発生させません。

enter image description here

EDIT:

最も簡単な解決策は、ユーザーコントロールにハンドラを取り付けることにより、それぞれの子からのバブルイベントを手動にある:

child1.Click += new EventHandler(child_Click); 
child2.Click += new EventHandler(child_Click); 
child3.Click += new EventHandler(child_Click); 

とあなたのクリックオフchild_Click火災内部イベント:

this.OnClick(e); 
+0

なので、私は自分のUserControl内のコントロールをクリックするたびに、UserControl自体をクリックしているようになるはずです。 – Xel

+0

@Xel Plsは私の編集を参照してください – Strillo

+0

ありがとう!出来た :) – Xel

0

正しい軌道に乗っているようですが、あなたのcontactが何であるかは明確ではありません。通常は、渡される引数を持つメソッドのためのデリゲートを(基本的に関数へのポインタ)を使用します。

あなたは、既存のデリゲートを削除してくださいます
if (bDeleteRdClick) 
    DeleteRD.Click -= delegate { DeleteRDClick(this.Object); }; 
DeleteRD.Click += delegate { DeleteRDClick(this.Object); }; 

、そうでない場合は、「スタックアップ」になる、複数のメソッドときを発射必須ではありません。上記の方法については

EventHandlerを使用すると、正しいアプローチであることを私には思えるが、私は上記の状態として、contactが正しい型であるかどうかのチェックはunmissed行かないだろう。

if (this.contact.GetType() == typeof(RibbonButton)) 
{ 
    RibbonButton Rb = (RibbonButton)contact; 
    Rb.Click += new EventHandler(contact_Click); 
} 

私はこれが何らかの助けになることを望みます。

関連する問題