DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Button1_Clickを外部から実行するには?

環境/言語:[XP,NET2003]
分類:[.NET]

 VB6までは他のプロシージャから
   Button1_Click
とコールするとクリックイベントを発生できましたが、
NETでは引数がいるようです。 senderはButton1で
良いようなのですが、eventargには、何を書けば
よろしいのでしょうか?
   Button1_Click(Button1,????)
■No17910に返信(apoさんの記事)
>  VB6までは他のプロシージャから
>    Button1_Click
> とコールするとクリックイベントを発生できましたが、

Button1.PerformClick()  では、だめなのですか?
sender As Object
には、イベントを発生させるクラス側ではほとんどの場合Meを設定する。
e As EventArgs
には、追加情報が必要なければEventArgsクラスの新しいインスタンスを指定する。追加情報が必要な場合はEventArgsクラスを継承したクラスを指定する。

と言う風になると思いますので、
Button1_Click(Me, New System.EventArgs)でいいと思います。
■No17910に返信(apoさんの記事)
>  VB6までは他のプロシージャから
>    Button1_Click
> とコールするとクリックイベントを発生できましたが、

そもそも僕はこの考えに否定的です。
イベントはプログラマが意図的に発生させるものではないですから。

Button1にある処理をメソッドとして追い出して双方から呼び出せばいいでしょう。としか思わないです。

PerformClickもショートカットキー的な使い方でなければ使用すべきでないと考えています。
> sender As Object
> には、イベントを発生させるクラス側ではほとんどの場合Meを設定する。
> e As EventArgs
> には、追加情報が必要なければEventArgsクラスの新しいインスタンスを指定する。追加情報が必要な場合はEventArgsクラスを継承したクラスを指定する。

↑の引用で書かれているように「イベントを発生させるクラス側では」です。
なので受け取ったほうにしてみればsenderはイベントの「送り主」であるわけです。

したがって、
> Button1_Click(Me, New System.EventArgs)でいいと思います。
Meは「呼び出し元」ではあっても「イベントの送り主」ではありません。

この考え方を基にすると、
ハンドラプロシージャを直接呼び出すことはせず、中の処理を外出しにしたプロシージャを呼び出す
ということになるでしょう。
当然、提示例でも動きますし、「別にいいじゃないか」という声もありますが。
ご回答いただいた皆様、大変ありがとうございました。
こんなに短時間に、こんなにたくさんの方からご助言
いただけるとは思ってもいませんでした。
 大感激です。
 VBレスキュー(花ちゃん) 様、らら様、例をお示し
いただいた方法で、動作できました。
 はいこーん様、まどか様、確かにこういうやり方は
お勧めではないのかも知れません。
 ボタンに適当に処理を割り振って、後で別のところからも
使いたくなったという安易な考えがあるのは事実です。
 今後、そのような考えも取り入れて行きたいと思います。
 ただ、今回、ボタンの引数について参考書などであまり
触れられていない事に皆様からご教示いただいたのは非常に
貴重で、ありがたいことだと感謝いたしております。

 これからもよろしくお願いいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板