我的ComboBoxes出现问题,如果我在其中输入一个值,然后跳出文本,则文本会更改为列表中第一项,并键入第一个字母。
我有:
我在ComboBox处于打开状态的Load事件中添加ComboBox的项目。
例如下面是来自Load事件的代码,我在其中填充了如下设置的ComboBox。
`Me.ComboBox1.Text = ""
Me.ComboBox1.Items.Add("a")
Me.ComboBox1.Items.Add("aaa")
Me.ComboBox1.Items.Add("combo")
Me.ComboBox1.Items.Add("combobox")
Me.ComboBox1.Items.Add("combobox test")
Me.ComboBox1.Items.Add("common")
Me.ComboBox1.Items.Add("common dialog")`
运行代码后,如果我选择ComboBox1并键入common-在ComboBox1中选择了common,但是如果我离开ComboBox1,则文本将恢复为组合。
它变得有点陌生,好像我在ComboBox1_Leave事件过程中使用以下代码一样,它引发了常见的变化:
MsgBox(ComboBox1.Text)
我还尝试在ComboBox1_KeyUp事件过程中将Text的值分配给字符串,然后在ComboBox1_Leave事件过程中将其值分配给ComboBox1.Text,但这没有任何作用。
如果在将字符串值分配给ComboBox1.Text之前放置了上面的MsgBox代码,则Text值会恢复为Common,但这不是实际的解决方案。
我还注意到,如果在按Tab键之前按Enter键,它会保留正确的值,但是我也不认为这是一个特别实用的解决方案。
有人知道这里发生了什么以及如何解决吗?
答案 0 :(得分:1)
将DropDownStyle设置为DropDownList是绝对必要的吗?
因为如果设置了DropDownStyle to DropDown
,则在按Tab键或失去焦点时所选的值将保留。
如果绝对有必要这样做,可以尝试一下。
Public Class Form2
Dim selectedTextForCombo As String = ""
Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.ComboBox1.Text = ""
Me.ComboBox1.Items.Add("a")
Me.ComboBox1.Items.Add("aaa")
Me.ComboBox1.Items.Add("combo")
Me.ComboBox1.Items.Add("combobox")
Me.ComboBox1.Items.Add("combobox test")
Me.ComboBox1.Items.Add("common")
Me.ComboBox1.Items.Add("common dialog")
End Sub
Private Sub ComboBox1_LostFocus(sender As Object, e As System.EventArgs) Handles ComboBox1.LostFocus
ComboBox1.SelectedItem = selectedTextForCombo
'This is just for a visualization of your issue
'Label1.Text = selectedTextForCombo
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
selectedTextForCombo = ComboBox1.Text
'This is just for a visualization of your issue
'Label1.Text = selectedTextForCombo
End Sub
End Class
警告: