- PR -

VB.NET Clickイベントを一つに集約

1
投稿者投稿内容
ポテチ
ベテラン
会議室デビュー日: 2003/03/28
投稿数: 69
投稿日時: 2003-03-31 09:57
ソフトキーボードをVB.NETで作ろうと思ってます。
フォームにbtn_1〜btn_52まで貼り付けてありますが、このボタンの動作が、単純にbtn_1を押したら「あ」btn_2は[い]といったものですので、クリックしたボタンのアンダーバー以下の数字が、Clickイベントのコード内で判断できれば、Clickイベントは一つだけ書けばよく実行速度に反映されるんじゃないかなと思ってますが、どんなボタンをクリックしても一箇所のClickイベントに集約する事なんてできるのでしょうか?また、イベントコード内でどのボタンが押されたのか判断する事はできますか?よろしくお願いします。
Masa
会議室デビュー日: 2002/08/13
投稿数: 16
投稿日時: 2003-03-31 10:30
masaといいます。

イベントのHandlesキーワードの後ろにbutton1.Click,button2.Click,〜と
記述していけば、単一のイベントでフックできるはずです。
その際に、イベント発生元のボタンは「sender.Name」で判定できると思います。

'フォーム上にbutton1、button2がある場合に
'ボタンをクリックするとボタンの名前が表示される。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As     System.EventArgs) Handles Button1.Click, Button2.Click
MsgBox(sender.Name)
End Sub


#この辺の内容ならネット上で検索すればいくらでも出てくると思うのですが...
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-03-31 10:54
.NETではVBと違い、イベントにメソッドを登録することで、イベントが起動したときにそのメソッドを呼び出してもらいます。
ですので、一つのイベントで複数のメソッドを呼び出してもらうこともできますし、逆に複数のイベントに一つのメソッドを登録して呼び出してもらうこともできます。

今回は後者ですね。Masaさんの書かれているようにHandlesで指定することでできます。

ですが、Handlesで52個もズラズラと並べるのは良いソースとは思えません。
まずButtonオブジェクトをButtonの配列で参照できるようにしたらどうでしょう。
btn_1〜btn_52というフィールドはそのまま残して
private btnArr as Button()=new Button(){btn_1,btn_2,btn_3,……}
とすれば良いでしょう。

で、後はそれぞれのオブジェクトのイベントに、
For i=0 To 51
 AddHandler btnArr(i).Click, AddressOf メソッド名
Next

のように呼んで欲しいメソッドをAddhandler文を使って登録すればOKです。

[ メッセージ編集済み 編集者: 一郎 編集日時 2003-03-31 11:00 ]
Masa
会議室デビュー日: 2002/08/13
投稿数: 16
投稿日時: 2003-03-31 11:04
masaです。
一郎さんのおっしゃるとおり、Handlesだけで記述するのは
良くないでしょうね。
見難くなるし、後で修正が発生した場合も対応が大変でしょう。

#この場であえてそこまで書く必要は無いかな?と思ったのですが...

ポテチ
ベテラン
会議室デビュー日: 2003/03/28
投稿数: 69
投稿日時: 2003-03-31 11:27
Masa様、一郎様
ありがとうございました。
まだVBはじめたばかりでわからない事だらけですが、
おかげさまでスマートなコードが書けそうです。
また一郎様、ソースサンプルまで載せて頂いて
ありがとうございました。
短期間で解決する事ができ大変感謝しております。
今後ともよろしくお願いします。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-03-31 12:53
解決したようですが、せっかく作ったので、サンプルを。
ポテチ
ベテラン
会議室デビュー日: 2003/03/28
投稿数: 69
投稿日時: 2003-04-18 10:09
HP見させていただきました。
本当にスマートに記述されており大変勉強になりました!
参考にさせていただきます。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)