vb.net - 组合框所选项目索引未更改
问题描述
我用三个combobox1、2、3 创建了一个简单的表单。combobox1 应该将combobox3 返回到索引-1,但是在为combobox3 选择一个项目后,combobox1 中的更改不会将combobox3 更改为索引-1,谢谢。
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i = 0 To 3
ComboBox1.Items.Add(i.ToString)
ComboBox2.Items.Add(i.ToString)
ComboBox3.Items.Add(i.ToString)
Next
ComboBox2.Enabled = False
ComboBox3.Enabled = False
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
ComboBox2.SelectedIndex() = -1
ComboBox3.SelectedIndex() = -1
ComboBox2.Enabled() = True
ComboBox3.Enabled() = False
End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
ComboBox3.Enabled() = True
ComboBox3.Items.Clear()
ComboBox3.Items.Add("0")
End Sub
结束类
解决方案
实际上,它确实将其更改Selectedindex
为-1。如果您已正确调试并实际查看了SelectedIndex
,您会发现情况确实如此。您根据 UI 做了一个假设,但这只是显示Text
. Text
即使将控件重置SelectedIndex
为-1,它也不会清除控件。这有点奇怪,但它就是这样。
您可以清除Text
太 或执行您可能应该首先做的事情并将 设置DropDownStyle
为DropDownList
。如果你这样做,那么控件将永远不会显示除 之外的文本,无论如何SelectedItem
,这是你ComboBox
在大多数情况下想要做的。除非您特别希望用户能够输入任意文本,否则不要将DropDownStyle
设置保留为 default DropDown
。
编辑:
实际上,我只是尝试了这段代码,它运行良好,即使每个DropDownStyle
设置为DropDown
:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For i = 0 To 3
ComboBox1.Items.Add(i.ToString)
ComboBox2.Items.Add(i.ToString)
ComboBox3.Items.Add(i.ToString)
Next
ComboBox2.Enabled = False
ComboBox3.Enabled = False
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
ComboBox2.SelectedIndex = -1
ComboBox2.Enabled = True
End Sub
Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
ComboBox3.SelectedIndex = -1
ComboBox3.Enabled = (ComboBox2.SelectedIndex <> -1)
End Sub
无论如何,实际上没有任何理由ComboBox3
在事件处理程序中引用ComboBox1
。