- 締切済み
.NETでのイベントハンドラを自由に操作したい
.NETでコントロールのイベントハンドラを 自由に取得・設定したいのですが そのようなことはできないのでしょうか? 例えばフォーム上に通常のボタンを貼り付けたのちに 自作のボタンをソースコード内で作成し、通常のボタンにセットされているイベントハンドラを自作ボタンのイベントハンドラに追加する、というようなことが したいのですが。。。 どういうふうにやっても、 「イベント 'System.Windows.Forms.Control.Click' は += または -= の左側にのみ表示されます。」 で、できません。 何か分かる方いらっしゃいましたらお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>btnB.OnClick += btnA.OnClick; デリゲートの連結(それぞれがリストしている呼出リストの)は、 Combine メソッドを使ってできるので、 >btnB.OnClick += btnA.OnClick; は、 btnB.OnClick.Combine(btnA.OnClick); でできるんじゃないかと思います
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>ボタンBの元々のイベントハンドラに加えてボタンAのイベントハンドラも追加する イベントハンドラの追加自体は、+=でデリゲートに追加していけます。(複数のイベントハンドラを設定できる) そういう意味でなく、Aをクリックした時にBをもクリックしたことにするというのなら、単に、呼び出せばいいような気がします。 見当違いならすみません
補足
やりたいのはこういうことです。 btnA.OnClick += btnClick1; btnA.OnClick += btnClick2; btnB.OnClick += btnClick3; btnB.OnClick += btnA.OnClick; 4行目でbtnClick1やbtnClick2を直接指定するのではなく btnA.OnClickに既にセットされているイベントハンドラをbtnBにセットしたいのです。 こうするとBtnBはBtnAに何がセットされているのか 知らなくてもセットできます。 この例ではBtnBをクリックすると btnClick3 btnClick1 btnClick2 の順で呼び出されるようになると思います。 (OnClickだけでなくほかのイベントもすべてコピーできればもっといいのですが) よろしくお願いします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
言語が何かわかりませんので抽象的な話。 イベントハンドラの追加は デリゲートに+=でイベントハンドラを追加します。 button.Click += new EventHandler(this.Button_Clicked); みたいな感じです。 MSDNイベントの利用なんかのサンプルを見て下さい。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconeventsoverview.asp
補足
分かりにくい説明ですみません。 言いたかったのは例えば、ボタンAにセットされている イベントハンドラをボタンBにセットしたいということです。つまり、ボタンBの元々のイベントハンドラに加えてボタンAのイベントハンドラも追加するというか。 理解してもらえるでしょうか。。。?
補足
イベント 'System.Windows.Forms.Control.Click' は += または -= の左側にのみ表示されます。 ですね。