UserControlの動的に追加されたボタンからイベントを取得する

私の UserControl にある Button のクリックイベントを取得し、そのフォームに UserControl を動的に追加したいとします。私は UserControl を追加している Form でイベントを発生させたいです。誰かが私に適切な方法を提案できれば、本当にとても役に立ちます。

0

4 答え

ユーザーコントロールでイベントを公開し、ユーザーコントロールをフォームに追加するときにそのイベントを購読する必要があります。例えば。:

public partial MyUserControl:Control
{
   public event EventHandler ButtonClicked;
   private void myButtonClick(object sender, EventArgs e)
   {
      if (this.ButtonClicked != null)
         this.ButtonClicked(this, EventArgs.Empty);
   }
}

public partial MyForm:Form
{
   private void MethodWhereYouAddTheUserControl()
   {
       var myUC = new MyUserControl();
       myUC += myUC_ButtonClicked;
      //code where you add myUC to the form...
   }

   void myUC_ButtonClicked(object sender, EventArgs e)
   {
     //called when the button is clicked
   }
}
3
追加された
@Deepashri:はいそれは:)
追加された 著者 digEmAll,
ちょっとこの私のwinFormで発生する必要がある私のvoid myButtonClick(オブジェクトの送信者、EventArgs電子)のusercontrolのボタンのイベントをクリックして私は?
追加された 著者 Deepashri,
thnx @digEmAll :)
追加された 著者 Deepashri,

私はあなたのタイトルを参照Winformsを使用していると思います。

クリックイベントを転送するにはどうすればいいですか。

だからあなたのUserControlのctor

public class MyUserControl
{
    public event EventHandler MyClick;
    private void OnMyClick()
    {
        if (this.MyClick != null)
            this.MyClick(this, EventArgs.Empty);
    }
    public MyUserControl()
    {
        this.Click += (sender, e) => this.OnMyClick();
    }
}
2
追加された

カスタムユーザーコントロールに独自のイベントを追加します。

顧客のユーザコントロール内で、ボタンを追加したら、(内部の)イベントハンドラをアタッチして、イベントハンドラにどのボタンがクリックされたかを伝えるために何らかの方法であなた自身のパブリックイベントを発生させます。ここにデリゲートしてください)。

これが完了すると、標準コントロールにフォームを追加するのと同じように、独自のイベントハンドラを追加することができます。

あなたの質問を読み返すと、これは正確な構造ではないかもしれません(ボタンは固定されていますが、ユーザコントロールは動的に追加されます)。いずれにしても、ほぼ同じでなければなりません。作成時にイベントハンドラを追加する場所とは異なります。


静的なボタンを1つ使用すると、Windowsフォームを使用していると仮定すると、処理が非常に簡単になります。

あなたのカスタムユーザコントロールで:

public event EventHandler ButtonClicked;//this could be named differently obviously

...

public void Button_OnClick(object sender, EventArgs e)//this is the standard "on button click" event handler created using the form editor
{
    if (ButtonClicked != null)
        ButtonClicked(this, EventArgs.Empty);
}

あなたのフォームで:

// create a new user control and add the event
MyControl ctl = new MyControl();
Controls.Add(ctl);
ctl.ButtonClicked += new EventHandler(Form_OnUserControlButtonClicked);//name of the event handler in your form that's called once you click the button

...

private void Form_OnUserControlbuttonClicked(object sender EventArgs e)
{
   //do whatever should happen once you click the button
}
0
追加された
答えを延長しました。それをテストしていないので、いくつかの小さなミスかもしれませんが、一般的な方向であなたをヒントする必要があります。
追加された 著者 Mario,
"In your form"の4行目を確認し、そのようなことを確実にしてください。
追加された 著者 Mario,
本質的には、はい。それが発生すると、これが渡されてコントロールのイベントが発生します。そのため、最終的にはフォームのイベントハンドラを呼び出します。
追加された 著者 Mario,
チャットメッセージ/質問を無視しても、それはまだエントリーに関するものなので、まだ問題ありません。あなたはDigEmAllの答えにしようとしましたか?彼の答えは、あなたが簡単に貼り付けることができるはずの完全なコードを提供するはずです。
追加された 著者 Mario,
ダイナミックな環境でも動作するはずです。あなたはおそらくちょうどどこかのイベント処理を混乱させました。時間があればもう一度試して、簡単なスタンドアロンのプロジェクトでやってみてください。
追加された 著者 Mario,
ねえ、私は正確にwant.Myボタンが私のusercontrol.Onlyで固定されている私はあなたが私に説明したのいくつかの例を与えることができますdynamic.please usercontrolを追加している
追加された 著者 Deepashri,
ちょっとマリオ私はあなたが提案したものを実装しようとしましたが、この行ではnullとしてButtonClickedを取得しています。if(ButtonClicked!= null)ButtonClicked(this、EventArgs.Empty);したがって、フォーム上のイベントが呼び出されないことが原因である可能性があります。私が紛失しているものはありますか....?
追加された 著者 Deepashri,
ちょっとマリオ私はその行を追加して、私は同じ行のnull例外を取得しています
追加された 著者 Deepashri,
このイベントは1つだと教えてください。public void Button_OnClick(object sender、EventArgs e)は、フォーム上で取得したいUserControlボタンのイベントです。
追加された 著者 Deepashri,
ちょっとマリオ私はまさにあなたが提案したものでしたが、私のフォーム上のイベントはまだ起きていません..私はstackoverflowに新しいですので、私は多くの評判をしないでください私たちのコメントは、それはこのフォーラムの規則に反するかもしれませんし、私はブロックされるかもしれません..私はこれと議論することができる他の方法のラウンドがあります..今までのthnx。
追加された 著者 Deepashri,
yup mario私はあなたの両方が完全であることを試してみましたが、私が知るようになったのは、フォームに動的にフォーム上に私のusercontrolを追加してからです。私は前に述べたようにButtonClickedをnullにしています。 usercontrolを使用しているが、私はusercontrolがデザインtime.Thnx形式でフォームに追加されているときに両方が完全に動作することを示唆したが、私の動的要件のここに私を助けなかったが、確かにそれは別のプロジェクトで私を助けるだろう: )
追加された 著者 Deepashri,
私たちのプロジェクトには今は含まれていませんが、どういうわけかクラックしたいので、ok @Marioは試してみます。
追加された 著者 Deepashri,
    フォーム usercontrol を追加するときは、クリックイベント( public の場合) userControl.button.Click + =新しいEventHandler(usercontrolButton_Click);

  1. usercontrol

    内のボタンの Click
0
追加された
これはあなたのボタンコントロールがpublicであることを前提としています...
追加された 著者 james lewis,