おはようございます。
VB5.0を1週間ほどかじって現在2005に乗り換えたばかりのド初心者です。
(用語の使い方などが間違っているかもしれません。おかしなところは指摘していただけるとありがたいです)
実行時に動的(?)に作成されたComboBoxをイベントハンドラへ関連付けようとしているのですが、ClickやLeaveなどで関連づけると正常に動作するのにTextChangedの場合になぜか認識してもらえません。
原因の見当がまったくつかず、困り果てています。
内容は、まずボタンを押すとコンボボックスが2つずつ追加されます。そのコンボボックスのリストを選ぶ際、追加されたふたつが同じものを選んでいると色が変わるようにするものです。
下にそのソースを簡潔にしたサンプルを記述させていただきます。
間違いの指摘や、うまくいかない原因、アドバイスなど頂ければ幸いです。
(formにはButton1というボタンが一つだけあります。)
Dim Index As Integer
Private CBox1() As ComboBox
Private CBox2() As ComboBox
Private Sub CBB_LT_SameErroCheck(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim T As Integer
T = sender.Tag
If CBox1(T).Text = "" Then
Exit Sub
End If
If CBox1(T).Text = CBox2(T).Text Then
CBox1(T).BackColor = Color.Red
CBox2(T).BackColor = Color.Red
Else
CBox1(T).BackColor = Color.White
CBox2(T).BackColor = Color.White
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ReDim Preserve CBox1(Index)
ReDim Preserve CBox2(Index)
SuspendLayout()
CBox1(Index) = New ComboBox
CBox2(Index) = New ComboBox
With CBox1(Index)
.Location = New Point(105, Index * 20)
.Size = New Size(95, 20)
.DropDownStyle = ComboBoxStyle.DropDownList
.Tag = Index
.Items.Add("List1")
.Items.Add("List2")
End With
With CBox2(Index)
.Location = New Point(200, Index * 20)
.Size = New Size(95, 20)
.DropDownStyle = ComboBoxStyle.DropDownList
.Tag = Index
.Items.Add("List1")
.Items.Add("List2")
End With
'AddHandler CBox1(Index).Click, AddressOf CBB_LT_SameErroCheck
'AddHandler CBox2(Index).Click, AddressOf CBB_LT_SameErroCheck
AddHandler CBox1(Index).TextChanged, AddressOf CBB_LT_SameErroCheck
AddHandler CBox2(Index).TextChanged, AddressOf CBB_LT_SameErroCheck
Me.Controls.Add(CBox1(Index))
Me.Controls.Add(CBox2(Index))
ResumeLayout(False)
Index += 1
End Sub
お礼
お早いご返信ありがとうございます。 仰るとおり、SelectedValueChangedを使ったところ思い通りの動作をしてくれました!助かりました! しかし解せないのが、ComboBoxStyle.DropDownListをデザイン時に配置しデザイン時にTextChangedイベントハンドラへ関連付けした場合と、デザイン時に配置したものを実行時にイベントハンドラへ関連付けした場合は何故か上手く動いたんです。 コントロールを実行時に動的に追加した場合のみこのような事になってしまったので余計に悩んでしまっておりました。 いくつか上げていただいた参考記事(英語は読めませんでした・・・)に似たような事が書いてありましたが、バグなんでしょうか。 何はともあれ、解決法を導いてくださった事、感謝いたします。 ありがとうございます。