DOBON.NET DOBON.NETプログラミング掲示板過去ログ

複数コントロール配列のイベント情報取得について

環境/言語:[WindowsXP Pro/VB.NET/Winアプリ]
分類:[.NET]

複数のコントロール配列を作成して、同じイベント処理をさせたいのですが、
イベント側で、どちらのコントロールのイベントが発生したかわかりません。
最終的には、インデクス番号も取得したいのです。
よろしくお願いいたします。


txtA(n) as TextBox
txtB(n) as TextBox

配列分全て
AddHandler txtA(n).Leave, AddressOf txtArray_Leave
AddHandler txtB(n).Leave, AddressOf txtArray_Leave

イベント発生
Private Sub txtArray_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
 txtA or txtB どちらのコントロールイベント?
■No5675に返信(かっくんさんの記事)
> 複数のコントロール配列を作成して、同じイベント処理をさせたいのですが、
> イベント側で、どちらのコントロールのイベントが発生したかわかりません。
> 最終的には、インデクス番号も取得したいのです。
> よろしくお願いいたします。
>
> 例
> txtA(n) as TextBox
> txtB(n) as TextBox
>
> 配列分全て
> AddHandler txtA(n).Leave, AddressOf txtArray_Leave
> AddHandler txtB(n).Leave, AddressOf txtArray_Leave
>
> イベント発生
> Private Sub txtArray_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
>  txtA or txtB どちらのコントロールイベント?

dim Index as integer
dim hantei as integer = 0
for idx as integer = 0 to n - 1
 if sender is txtA(idx) then
  Index = idx
  hantei = 1
  exit for
 elseif sender is txtB(idx) then
  Index = idx
  hantei = 2
  exit for
 end if
next
select case hantei
 case 1
  messagebox.show("txtA(" + Index + ")が見つかりました。")
 case 2
  messagebox.show("txtB(" + Index + ")が見つかりました。")
 case else
  messagebox.show("みつからねぇYo!")
end select

試してないけど、これでできないかな?間違ってたらゴメン
解説:
ひとつの配列なら通常、System.Array.IndexOfメソッドを使えばインデックス番号は取得できるんだけど、複数あるので、ひとつひとつチェックしていけばおのずとインデックス番号も取得できるという仕組みです。
■No5678に返信(ぺがらぼさんの記事)
ぺがらぼさん、早い返答ありがとうございました。
参考になりました。
コントロールがわかれば、System.Array.IndexOfを使おうと思っていたのです。
また、何かあればよろしく御願い致します。
解決済み!
■No5675に返信(かっくんさんの記事)
> 配列分全て
> AddHandler txtA(n).Leave, AddressOf txtArray_Leave
> AddHandler txtB(n).Leave, AddressOf txtArray_Leave

結局はtxtAかtxtBで別のことをしたいのに、
無理に一つのイベントハンドラで処理する意味がないと思います。

AddHandler txtA(n).Leave, AddressOf txtAArray_Leave
AddHandler txtB(n).Leave, AddressOf txtBArray_Leave


Private Sub txtAArray_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
'txtAのイベント

Private Sub txtBArray_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
'txtBのイベント

txtAとtxtBとで共通的に行いたい処理があれば、
その共通処理を両方のイベントハンドラで呼び出せばよいかと。
この時点でイベント発生源は明らかなので何も判断は必要ありませんよね。
■No5696に返信(よねKENさんの記事)
> その共通処理を両方のイベントハンドラで呼び出せばよいかと。
同じ記述するのが嫌だったので、何か良い方法があるのかなと思ったのです。
よねKENさん、ご指摘ありがとうございました。
解決済みチェック忘れ
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板