2012-03-13 3 views
7

GameButtonと呼ばれるユーザーコントロールがあり、その中にラベルがあります。フォームにユーザーコントロールを追加してクリックイベントを追加すると、カスタムボタンの背景をクリックしたときにトリガーされますが、ラベルのテキストは表示されません。ユーザーコントロールコードの中に一連のクリックイベントを追加しないでこれを修正するにはどうすればよいですか?コントロール内のテキストをクリックすると、ユーザーコントロールのクリックイベントが機能しません。

編集:UIフレームワーク:リサイズ

+0

UIフレームワーク(Winformsの、WPF、Webフォーム、MVC)を作る? –

+0

申し訳ありませんが、 – Oztaco

+0

をリサイズもタグを含む避けてください –

答えて

10

私が正しくあなたを理解していた場合は、お使いのGameButtonのユーザーコントロールをクリックしたときにイベントを発生さではなく、ラベルがクリックされたときになります - あなたは両方をしたいです。これは、ラベル(コントロール)が背景の上にあるためです。したがって、クリックイベントでもラベルを登録する必要があります。これは、デザイナで手動で行うことも、ページ上の各コントロールに対してプログラムで行うこともできます。あなたは、ユーザーコントロール内のすべての制御を行いたい場合は

は、ユーザーコントロールのOnLoadイベントにこれを入れて、あなたはすべてのコントロールに同じクリックイベントを使用することができます。

foreach(Control c in this.Controls){ 
    c.Click += new EventHandler(yourEvent_handler_click); 
} 

public void yourEvent_handler_click (object sender, EventArgs e){ 
    //whatever you want your event handler to do 
} 

EDIT:最良の方法は、作成することですユーザーコントロールのイベントハンドラプロパティをクリックします。これにより、クリックイベントをユーザーコントロールに追加/削除するたびに、ユーザーコントロール内のすべてのコントロールに自動的に追加/削除されます。

public new event EventHandler Click { 
     add { 
      base.Click += value; 
      foreach (Control control in Controls) { 
       control.Click += value; 
      } 
     } 
     remove { 
      base.Click -= value; 
      foreach (Control control in Controls) { 
       control.Click -= value; 
      } 
     } 
    } 

これは、別のpost通りである:

は、この情報がお役に立てば幸い!

+0

デザイナーの通常のボタンと同じように、カスタムボタンにクリックイベントを追加することができるようにしたいと考えていましたが、ラベルには影響しません – Oztaco

+0

@EfeOzturkogluについてよくわかりません。 1つのイベントハンドラで任意の場所をクリックすることができる通常のボタンのように、あなたのusercontrolをしたいですか? – ImGreg

+0

ええ、私はコントロールのハンドラーを追加する必要はありませんし、毎回その中のラベルを追加します。ボタンの新しいインスタンスを作成するたびに一度だけ追加します。 – Oztaco

0

あなたのラベルのプロパティが「Falseの場合、マウスイベントは、ユーザーコントロールで動作します "有効"。

関連する問題