我有一个组合框和一个列表框。 我想要的是,当我从组合框中选择一个值(文本)来检查列表框中是否有相同的值(相同的文本),如果有,则msgbox应显示为“DATA FOUND”
我尝试了这段代码,但它不能正常工作
Dim i As Integer
For i = 0 To ListBox1.Items.Count - 1
If ComboBox1.SelectedItem = ListBox1.ValueMember Then
MsgBox("DATA FOUND")
End If
Next i
提前致谢....
答案 0 :(得分:2)
您正在使用具有不同含义的两个属性进行比较。 SelectedItem是一个对象(可以是任何东西,取决于你如何填充组合,ValueMember只是一个属性的名称,用作ListBox中项目的实际值。
然而,两个类(ListBox和ComboBox)共享相同的模式来存储它们的列表项,所以假设两个类都使用字符串列表填充,那么你的代码可能是
Dim curComboItem = ComboBox1.SelectedItem.ToString()
For i = 0 To ListBox1.Items.Count - 1
If curComboItem = ListBox1.Items(i).ToString() Then
MsgBox("DATA FOUND")
Exit For
End If
Next i
答案 1 :(得分:0)
If ComboBox1.SelectedItem = ListBox1.ValueMember Then
应该是
If ComboBox1.SelectedItem = ListBox1.Items(i) Then
请注意 ComboBox1.SelectedItem 仅适用于Collection内的项目。你可以将它扩展到任何文本 。文本 参数。
Pd积
Next i '???
答案 2 :(得分:0)
在ComboBox
和ListBox
中使用真实对象通常可以提高应用程序的灵活性。
例如,您有一个车载应用程序,其中您有很长的可用汽车列表而您不想浏览整个列表 - 您使用ComboBox来选择品牌和型号,并对其中的项目执行某些操作你的列表框。
(伪代码)
你的车对象。
class Car
ModelId
ModelMake
ModelName
FullName = ModelMake & " " & ModelName
End Class
class AvailableCar Inherits Car
IsOnTheLot
VIN
Price
'etc
End Class
在您的表单类
中comboCarMakes.DataSource = GetListOfMakesOfCars() ' List of Car classes
comboCarMakes.ValueMember = "ModelId"
comboCarMakes.DisplayMember = "FullName"
listAvbailableCars.DataSource = GetListOfAvailableCars() ' List of AvailableCar classes
listAvbailableCars.ValueMember = "VIN"
listAvbailableCars.DisplayMember = "FullName"
Sub comboCarMakes_SelectedIndexChanged
Dim car as Car = DirectCast(comboCarMakes.SelectedItem, Car)
For i = 0 To listAvbailableCars.Items.Count - 1
If car.ModelId = DirectCast(listAvbailableCars.Items(i), AvailableCar).ModelId Then
' Do something
End If
Next
End Sub
优势 - 您可以立即获得大量信息。