質問: プロシージャからイベントをコールする いつもお世話になっております。 vb.netで開発をしておるのですが、 aaaのプロシージャからbutton1_clickのイベントを呼ぶ場合 private function aaa() call button1_click(**(1)**,**(2)**) end function (1)と(2)に何を入れればよいのでしょうか? 宜しくお願いいたします。
回答: 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様のお役にたつのではないかと思います。 長々と乱文失礼しました。