调整大小时出现奇怪的ComboBox行为

时间:2010-01-28 00:28:43

标签: vb.net combobox

我遇到一个问题,即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 所期望的。

有谁知道为什么会这样?任何建议的解决方法?

谢谢!

斯蒂芬

3 个答案:

答案 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的上述答案,我以这种方式解决了这个问题。

我有一个组合作为控件左右锚定,所以当表单扩展时它会拉伸。当屏幕展开时,组合框文本被突出显示,好像它已经有焦点,即使它没有。

作为一种解决方法,我将其中一个锚点关闭并将其添加到旁边的文本框中。现在我的组合框没有随屏幕扩展,而文本框却改为。我知道它不是解决所有解决方案,但它可以帮助处于类似情况的人解决问题。