ここから本文です

VB.NET2003(コンボボックス内容変更時のイベントについて)

mas********さん

2010/10/1910:27:04

VB.NET2003(コンボボックス内容変更時のイベントについて)

VB.NET2003の超初心者です。

かなり初歩的な質問をします。

Form1上にコンボボックスを設置し、内容変更された時に処理を行います。
------------------------------
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
[処理]
End Sub
------------------------------

上記で行っている処理を、別のプロシージャ内に組み込みたい場合、どのように明記のでしょうか?

------------------------------
Private Sub SYORI1()
[ComboBox1_SelectedIndexChangedのプロシージャへ飛ばす(ここに記述する文法がわかりません)]
End Sub
------------------------------

補足参考意見ありがとうございました。
いくつか方法はあるんですね。

ただ・・・気になったのが
>しかし、これが良い書き方かといえば、ちょっと疑問です。
>ま・・・実際には良く見られるコードだってのも事実ですが。(^_^;)
とあるんですが、どういうことなのでしょうか?
本来行うべき方法ではないということでしょうか?
実際に良く見るコードとありますが、そうなんですか?

閲覧数:
2,046
回答数:
2

違反報告

ベストアンサーに選ばれた回答

ana********さん

編集あり2010/10/2010:51:22

「プロシージャーへのジャンプ」という点のみの回答とすれば

Me.ComboBox1_SelectedIndexChanged(New Object(),New EventArgs())

でOKです。

しかし、これが良い書き方かといえば、ちょっと疑問です。

ま・・・実際には良く見られるコードだってのも事実ですが。(^_^;)

【補足】
ま、建前論から行くと疑問がある・・・という意味ですよ。

何故かといえば、イベントプロシージャのsenderとeは、メソッドの「引数」です。
当然ながら「意味がある」んですよ。

そもそもHandle句てのは、指定されたイベントをキャッチして、そのメソッドをコールするという意味です。
メソッドのコールですから、引数には当然「意味がある」んです。

ですから、この場合だとComboBox1のSelectIndexChangedイベントハンドラは、senderにはイベントの発行元あるオブジェクト(この場合はComboBox1)、eにはオブジェクトが発行したイベントオブジェクトを引数として渡して、ComboBox1_SelectesIndexCahngedメソッドをコールするんです。

ところが。

Me.ComboBox1_SelectedIndexChanged(New Object(),New EventArgs())

と記述した場合「意味のない引数を渡した」という事になりますよね。

じゃあ、何のために引数はあるんだ・・・と。こういう建前論が始まってしまうんですよ。

とはいえ。

ComboBox1の特定イベントが発生したことは、メソッドがコールされた時点で判っているんだし、わざわざ引数を引用することもない。

最初から利用価値のない引数なのに、イベントプロシージャの書式だから「書かなきゃ行けないから書いているだけ」と。

建前論を重視して、イベントハンドルのメソッドと、実際の処理のメソッドを厳密に分けて書くのも、記述箇所の分散というデメリットを引き起こす。

だったら、別に意味のない引数を渡す記述だって「いいじゃ~ん!」てなケースも多々あるんですよ。
(いや・・・むしろこっちの方が多いかも・・・)

ま、こればっかりは主観によるところも多いので

「イベントプロシージャの引数にも意味がある」
「意味のない引数は設定するべきではない」

この二点の建前が存在する・・・という事だけ頭に置いておけば充分だと思います。

質問した人からのコメント

2010/10/20 14:17:10

降参 なーるほど。そう考えれば疑問ですね。
たしかに「いいじゃーん!」になる自分がいますが、建前は把握しておきます。
ありがとうございました!

ベストアンサー以外の回答

1〜1件/1件中

dab********さん

2010/10/1911:28:32

ComboBox1_SelectedIndexChangedの中にある処理を他の場所でも使用する場合は、共通関数としてSYORI1()もしくは別の関数の中にComboBox1_SelectedIndexChangedの中で行っている処理を記述し、
ComboBox1_SelectedIndexChangedの処理からSYORI1()もしくは別の関数を呼び出す方が一般的かと思います。

今回のイベントでは、イベントが発生したオブジェクト(sender)と発生したイベントに関する情報(e)が引数として指定されていますので、ダミー値でも入れれば呼び出しは可能かもしれませんが、後々のメンテナンス作業で他の人・あるいは自分自身がそのソースを見た場合、混乱するのではないかと思います。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる