コントロールを動的に作成する場合は、イベントハンドラも動的に追加する必要があります。 SelectedIndexChanged
イベントの使用には何も問題ありません。
新しいプロジェクトを作成し、このコードをPublic Class Form1
の中に貼り付けることでテストできます。
Private myComboBox1 As ComboBox
Private myComboBox2 As ComboBox
Private Shared selectedIndexChanged As EventHandler =
Sub(sender As Object, e As EventArgs)
Dim myComboBox = DirectCast(sender, ComboBox)
' alert the user as to what was selected
MessageBox.Show(String.Format("{0} value: {1}, index: {2}",
myComboBox.Name, myComboBox.Text, myComboBox.SelectedIndex))
' you can do something different on each one by name in a case statement
Select Case myComboBox.Name
Case "myComboBox1"
' do something for 1
Case "myComboBox2"
' do something for 2
End Select
End Sub
Private Sub addHandlers()
AddHandler myComboBox1.SelectedIndexChanged, selectedIndexChanged
AddHandler myComboBox2.SelectedIndexChanged, selectedIndexChanged
End Sub
Private Sub removeHandlers()
RemoveHandler myComboBox1.SelectedIndexChanged, selectedIndexChanged
RemoveHandler myComboBox2.SelectedIndexChanged, selectedIndexChanged
End Sub
フォームのEventHandler
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' dynamically generate combo boxes
myComboBox1 = New ComboBox() With {.Name = "myComboBox1",
.Left = 30,
.Top = 30}
myComboBox2 = New ComboBox() With {.Name = "myComboBox2",
.Left = 30,
.Top = 60}
' add some items
myComboBox1.Items.AddRange({1, 2, 3})
myComboBox2.Items.AddRange({"four", "five", "six"})
' add the combo boxes to the form
Me.Controls.Add(myComboBox1)
Me.Controls.Add(myComboBox2)
' add event handlers
addHandlers()
End Sub
Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
removeHandlers()
End Sub
出典
2016-07-11 19:52:19
djv
動的 'SelectedIndexChanged'の問題をいただきましたので、コントロールは、イベントに応答することができます作成しましたか? – Plutonix
あなたは[間違った質問](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)を求めているかもしれません。 – sstan
あなたはハンドラを追加してみませんか?これは、実行時にコントロールを作成しているので必要なものです。現在のコードを表示することなく、この種のことはあなたを助けてくれます。さらにお手伝いをさせていただいた内容で質問を更新してください。 – Codexer