- ベストアンサー
プロシージャからイベントをコールする
いつもお世話になっております。 VB.NETで開発をしておるのですが、 AAAのプロシージャからButton1_Clickのイベントを呼ぶ場合 Private Function AAA() Call Button1_Click(**(1)**,**(2)**) End Function (1)と(2)に何を入れればよいのでしょうか? 宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
manihei様がすでにプログラマーとしてご活躍されていれば お分かりのように、システム開発はほとんどの場合1人ではなく、 数名の方と一緒に開発されていると思います。 また、たとえ1人で開発されている場合でも毎日のようにコーディング していれば、1度自分が書いたプログラムでも3日も経てば他人が書いたコードの ように思えるはずです。 その上で、ただ「ボタンを押す」というコードを.NETで用意されている 1.Button1.PerformClick() とするか 2.Button1_Click(New Object, New System.EventArgs) とした場合どちらがわかりやすいでしょうか? きっと、2のコードが書かれていた場合、manihei様を含め、 後でプログラムを見た人はきっと何らかの思惑が有って2のコードを 書いたはずだと考えるのでは無いでしょうか? そして、何の意味も無いことが分かり、ガックリし軽い怒りを覚えます。 ttyp03様も何度もおっしゃっているように、「わかりやすい」コードを 書くのは未来の自分の為でもあるのでは無いでしょうか? また、ボタンのイベントハンドラは以下のようになってますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '処理 End Sub イベントハンドラの引数にObject型のsender、System.EventArgs型のeが有ります。 senderはイベントが発生したオブジェクト(この場合ボタンですね)の情報が入ってます。 同様にeにも発生したイベントの情報が含まれてます。 ボタンの場合eにはたいした情報は有りませんが、テキストボックスのキーダウン イベントなどでは、どのキーが押されたかなど様々な情報を取得出来ます。 開発者は当然その前提の下でイベントハンドラを実装します。 --------------------------------------------- イベントハンドラ内の処理例 'sender(Object)をbutton型にキャスト Dim btn As Button = DirectCast(sender, Button) 'ボタンの名前を表示 MessageBox.Show(btn.Name) --------------------------------------------- そこで、例えばAAAと言うメソッド内にボタンを押すという意味で以下のコード Button1_Click(New Object, New System.EventArgs) を使ってしまえばイベントハンドラ内では何の情報も得ることが出来ないどころか例外が発生します。 逆に、AAAと言うメソッド内でButton1_Click(New Object, New System.EventArgs) などとイベントを直接呼んでいるのを知らずボタン内のイベントハンドラで 処理例のようなコードを誰かが書いたとしましょう。 さらに、AAAというメソッドは滅多に通る事が無く、テストの手抜きでリリースまで しちゃた時には非常にアワワな事になります。 manihei様の安眠の為にもお勧め致しません。 最後に、補足では有りますがご質問内に有る >Private Function AAA() >Call Button1_Click(**(1)**,**(2)**) >End Function ですが、正確にお答えすると、 (1)には、Objectクラスまたは、Objectクラスの派生クラスのオブジェクト (2)には、System.EventArgsクラスまたは、System.EventArgsクラスの派生クラスのオブジェクト となります。オブジェクト指向の継承やポリモフィズムの部分を勉強すると意味が 分かるようになり、ボタンイベントだけでは無く今後プログラムを作成する上で manihei様のお役にたつのではないかと思います。 長々と乱文失礼しました。
その他の回答 (3)
- locoyama
- ベストアンサー率77% (7/9)
はじめまして、VB.NETでボタンクリックイベントを 発生させるには、以下のようにします。 Button1.PerformClick() また、ご質問のようにクリックイベントのメソッドを 呼ぶには、下記のようにも出来ますが、 このようなコードは書かない方が賢明だと思いますよ。 Button1_Click(New Object, New System.EventArgs)
補足
ご回答ありがとうございます。 このようなコードは書かない方が賢明だと思いますよ。 Button1_Click(New Object, New System.EventArgs) 上記のコードを書く場合何か問題があるのでしょうか?
- Kuppycat
- ベストアンサー率50% (109/216)
ボタンのクリックはクリックイベントを直接呼ぶのでは無く、クリックイベントを発生させてはいかがでしょう。 VB6.0の場合、 Button1.Value = True とするとクリックイベントが発生します。 VB.NETにも該当するものがあると思うのですが。 当方、VB6.0のみの環境なので検証できず。すみません。 以上、ご参考とまで。
- ttyp03
- ベストアンサー率28% (277/960)
個人的な考え方を言うと、その作りが間違っていると思います。 イベントプロシージャはあくまでもイベントからのみ受け付ける位置付けにしておき、他のプロシージャからの呼び出しはしないようにしたほうがわかりやすいと思います。 で、どうするかというと、Button1_Click の処理内容をごっそり別のプロシージャとして作成し、Button1_Click からはそのプロシージャを呼び出します。 同様にAAAプロシージャからも新しく作ったプロシージャを呼び出すようにするとわかりやすいかと思います。 Private Function Button1_Click() Call button1(); End Function Private Function AAA() ~ Call button1(); ~ End Function Private Function button1() ' Button1_Clickの処理 End Function しばらくVB.netを触っていないので構文が間違ってたらすみません。
お礼
とんでもありません。参考になりました。 ありがとうございます。