【VB2005】 実行時に動的にコントロールを作成した後のコントロールへの処理
こんばんわ、VB5.0を1週間ほどかじって現在2005に乗り換えたばかりのド初心者です。
(用語の使い方などが間違っている可能性があるかもしれません。おかしなところは指摘していただけるとありがたいです)
VB5.0を使っていたときはコントロール配列を使って簡単にできた事が2005になってコントロール配列を使えなくなったため行き詰ってしまいました。
内容は、ある操作をすると画面にコントロールが1つずつ追加されていき、そのコントロールのプロパティを他のコントロールから操作できるようにする物です。
検索などで情報を集めて、なんとかコントロールを追加していくことができるようにはなったのですが、プロパティを変更するためにコントロールにアクセスする際にエラーになってしまって困っています。
一つだけコントロールが追加された場合は、問題なくプロパティをいじれるのですが、2つ以上追加した場合に最新のコントロール以外のプロパティをいじろうとするとエラーになってしまうのです。
下に私の作りたいプログラムを簡潔にしたサンプルソースを記述させていただきます。
間違いの指摘やアドバイスをいただければ幸いです。
FormにはAddButtonというボタンが一つだけあります。
Dim Index As Integer
Private Buttons() As System.Windows.Forms.Button
Private Labels() As System.Windows.Forms.Label
Private Sub AddButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click
Index += 1
Me.Buttons = New System.Windows.Forms.Button(Index) {}
Me.Labels = New System.Windows.Forms.Label(Index) {}
Me.SuspendLayout()
Me.Buttons(Index - 1) = New System.Windows.Forms.Button
Me.Buttons(Index - 1).Text = Index - 1
Me.Buttons(Index - 1).Size = New Size(30, 30)
Me.Buttons(Index - 1).Location = New Point((Index - 1) * 30, 50)
Me.Labels(Index - 1) = New System.Windows.Forms.Label
Me.Labels(Index - 1).Text = Index - 1
Me.Labels(Index - 1).Size = New Size(30, 30)
Me.Labels(Index - 1).Location = New Point((Index - 1) * 30, 100)
AddHandler Me.Buttons(Index - 1).Click, _
AddressOf Me.Buttons_Click
Me.Controls.AddRange(Me.Buttons)
Me.Controls.AddRange(Me.Labels)
Me.ResumeLayout(False)
End Sub
Private Sub Buttons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Labels(sender.text).ForeColor = Color.Red
End Sub
お礼
お早い回答ありがとうございます。 今のところInputManの機能で何とかならない場合、こちらを使うので参考にさせて頂きます。