我遇到一个问题,即ComboBox控件在调整大小时会更改Text值。以下是我编写的一些示例代码:
Option Explicit On
Option Strict On
Public Class FMain
Private Sub FMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
uxComboBox.DropDownStyle = ComboBoxStyle.DropDown
uxComboBox.AutoCompleteSource = AutoCompleteSource.ListItems
uxComboBox.AutoCompleteMode = AutoCompleteMode.Suggest
ComboTest()
End Sub
Private Sub ComboTest()
Dim value As String = "6"
uxComboBox.Text = String.Empty
uxComboBox.Items.Clear()
uxComboBox.Items.AddRange(New String() {"4 9/16", "6 9/16", "7 9/16", "8 9/16"})
Dim index As Integer = uxComboBox.FindStringExact(value)
If uxComboBox.SelectedIndex index Then
uxComboBox.SelectedIndex = index
End If
If uxComboBox.SelectedIndex = -1 AndAlso _
Not String.Equals(uxComboBox.Text, value, StringComparison.OrdinalIgnoreCase) Then
uxComboBox.Text = value
End If
' unselect the text in the combobox
'
uxComboBox.Select(0, 0)
End Sub
End Class
请注意,此表单(FMain)上有一个组合框(uxComboBox),它停靠在顶部。当我运行代码时,我发现组合框的值为“6”,这正是我所期望的。当我然后调整表单大小时,组合框的值为“6 9/16”,这就是我 NOT 所期望的。
有谁知道为什么会这样?任何建议的解决方法?
谢谢!
斯蒂芬
答案 0 :(得分:5)
是的,这是ComboBox的本机Windows实现中的一个已知错误。这个bug有另一个方面。在表单上放一个按钮并将其TabIndex = 0,将CB的TabIndex更改为1.运行它,该按钮将具有焦点。调整。请注意,ComboBox的文本会像以前一样更改,但现在也会突出显示,就好像它具有焦点一样。即使它没有。
我认为这个bug自Vista以来一直存在,它在Win7中没有得到修复。没有已知的解决方法。
答案 1 :(得分:0)
当表单加载时,ComboTest
被执行,你看到'6',但是当你调整大小时它不会显示新数据,听起来你需要刷新组合框,无论调整大小或不。
在uxComboBox.Refresh()
行后立即尝试uxComboBox.Items.AddRange
。
在“ComboTest”行之后,将所选索引设置为0 uxComboBox.Index = 0
。
希望这有帮助, 最好的祝福, 汤姆。
答案 2 :(得分:0)
我正在使用Windows 10和Visual Studio 2017.看来这个bug仍然存在。通过Hans Passant的上述答案,我以这种方式解决了这个问题。
我有一个组合作为控件左右锚定,所以当表单扩展时它会拉伸。当屏幕展开时,组合框文本被突出显示,好像它已经有焦点,即使它没有。
作为一种解决方法,我将其中一个锚点关闭并将其添加到旁边的文本框中。现在我的组合框没有随屏幕扩展,而文本框却改为。我知道它不是解决所有解决方案,但它可以帮助处于类似情况的人解决问题。