- PR -

【VB.NET】コントロール配列のイベント内で、コントロールを識別する方法

1
投稿者投稿内容
Fe
会議室デビュー日: 2004/02/26
投稿数: 5
投稿日時: 2004-02-26 11:21
はじめまして。Feと申します。

コントロール配列のイベントに関する質問です。
VB.NETで、スマートデバイスアプリケーションをメイクしています。
デザイン時に配置した複数のボタンを、フォームロード時にコントロール配列に格納し、イベントハンドラに関連付けています。(以下がそのコード)

Dim MyButtons(9) As Button 'コントロール配列

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim i As Integer '配列のインデックス番号
'コントロール配列に、すでに作成されているインスタンスを代入
MyButtons(0) = Button1
MyButtons(1) = Button2
MyButtons(2) = Button3


MyButtons(9) = Button10
'イベントハンドラに関連付け
For i = 0 To 9
AddHandler MyButtons(i).Click, AddressOf MyButtons_Click
Next i
End Sub

Private Sub MyButtons_Click(ByVal myObject As Object, ByVal e As System.EventArgs)

'各ボタンごとの処理

End Sub


そこで、コントロール配列のクリックイベント(MyButtons_Click)内で、どのボタンがクリックされたかを判別し処理を行いたいのですが、判別の仕方がわかりません。
例えば、配列のインデックス番号で判別する事はできないのでしょうか?
何か良い方法がございましたら、御教授下さい。
宜しくお願い致します。

[ メッセージ編集済み 編集者: Fe 編集日時 2004-02-26 11:25 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-02-26 11:39
NAL-6295です。

コード:
For each MyButton As Button In MyButtons
    if MyButton Is myObject then
      '押下されたボタン発見
    end if
Next




こんな感じや

コード:
dim MyButton As Button 
For intLoop as integer = MyButtons.GetLowerBound(0) To _
                                    MyButtons.GetUpperbound(0)
    if MyButtons(intLoop) Is myObject then
      '押下されたボタン発見
    end if
Next



こんな感じで可能です。
999
会議室デビュー日: 2003/05/17
投稿数: 14
投稿日時: 2004-02-26 11:52
配列のインデックス番号は以下の方法で取れると思います。

Dim ClickedIndex As Integer
ClickedIndex = Array.IndexOf(MyButtons, myObject)
Fe
会議室デビュー日: 2004/02/26
投稿数: 5
投稿日時: 2004-02-26 12:04
NAL-6295さん、999さん、御教授ありがとうございます。
この方法で上手くいきそうです。
これから精進致します。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-02-26 12:11
配列のインデックスではなくて単にButtonオブジェクトにアクセスしたいだけなら、
Dim clickedButton as Button = DirectCast(myObject, Button)
とかでいいですが(Button型にキャストしてるだけ)。
というか、イベントのsenderは元々、イベントを発生させたオブジェクトにアクセスできるようにするために用意されています…
1

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