投稿者 yukihiro  (社会人) 投稿日時 2015/12/8 00:18:04
こんばんは、はじめまして。
早速ですが、

環境:

Win7+VisualStudio2013

目的:

前提としてVB6.0のコードを.NET4.5化したいというお題があり、
VB6で使用されていた、ボタンコントロールなどの配列に似た機能を使用したいと思っています。
(アップグレードマネージャーでVB6のコードをアップグレードした所、BaseOCXArrayは継承できな作りになっており使用できないとのメッセージが表示されたため)

ここでやりたい事は
Senderなどで送られたオブジェクトを使用して
VB6で言うコントロール配列の「添え字」を取得したいです。

コレクションを使用して試しにコードを書いてみたのですが、上手くいきません。
もし、分かる方がいらっしゃるのでしたら、教えて頂きたいです。

(最悪、Button1、Button2のイベントハンドラからそれぞれ「0」とか「1」とかの引数を付加して関数に飛ばせばいいのですが、
コレクションや配列を使用して、コードが書けるならばその方が良いと思い、投稿させていただきました。

書いてみたコード:

(Button1, Bottun2, Label1は、Visualstudioのデザイナーを使用し、Form1上に配置しています)

Public Class Form1

    Public cltCollection As System.Windows.Forms.Control.ControlCollection

    'フォームのロード
    'ボタンコントロールを格納するコレクションの作成
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Me.cltCollection = New System.Windows.Forms.Control.ControlCollection(Me)
        cltCollection.Add(Button1)
        cltCollection.Add(Button2)
        AddHandler Button1.Click, AddressOf buttons_Click
        AddHandler Button2.Click, AddressOf buttons_Click

    End Sub

    '各ボタンが押された時のイベント
    '可能ならこの中で添え字を取得したい
    Private Sub buttons_Click(sender As Object, e As EventArgs)
        Dim index As Integer
        index = cltCollection.IndexOf(sender)
        index = cltCollection.

        Label1.Text = "クリックされたボタン = " & index.ToString & "です"
        'この場合、「0」や「1」ではなく「-1」が表示される

    End Sub

End Class



以上、散文で申し訳ありませんが、よろしくお願いいたします。