Нечетное поведение ComboBox при изменении размера - PullRequest
6 голосов
/ 28 января 2010

У меня проблема с тем, что элемент управления ComboBox изменит свое текстовое значение при изменении его размера. Вот пример кода, над которым я работал:


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», которое я бы НЕ ожидал.

Кто-нибудь знает, почему это происходит? Любые предлагаемые обходные пути?

Спасибо!

Стивен

Ответы [ 3 ]

5 голосов
/ 28 января 2010

Да, это известная ошибка в родной реализации ComboBox для Windows. Есть еще один аспект этой ошибки. Поместите кнопку в форму и задайте ей TabIndex = 0, измените TabIndex CB на 1. Запустите ее, кнопка будет иметь фокус. Изменение размера. Обратите внимание, что текст ComboBox изменяется, как и раньше, но теперь также выделяется, как будто он имеет фокус. Даже если это не так.

Я думаю, что эта ошибка существовала с Vista, она не была исправлена ​​в Win7. Там нет известного обходного пути для этого.

0 голосов
/ 05 апреля 2017

Я использую Windows 10 и Visual Studio 2017. Похоже, что эта ошибка все еще существует. С ответом Ханса Пассанта выше я обошел проблему следующим образом.

У меня была комбинация в качестве элемента управления, привязанного слева и справа, поэтому она растягивалась при расширении формы. Когда экран расширился, текст в поле со списком был выделен так, как будто он получил фокус, даже если это не так.

В качестве обходного пути я снял один из якорей и добавил его в текстовое поле рядом с ним. Теперь мое поле со списком не расширяется вместе с экраном, вместо этого текстовое поле. Я знаю, что это не решение всех проблем, но оно может помочь кому-то в подобной ситуации разобраться в проблеме.

0 голосов
/ 28 января 2010

Когда форма загружается, ComboTest запускается, и вы видите «6», однако, когда вы изменяете размер, он не отображает новые данные, звучит так, как будто вам нужно обновить поле со списком, независимо от того, изменился ли размер ,

Попробуйте uxComboBox.Refresh() сразу после строки uxComboBox.Items.AddRange.

И после строки 'ComboTest' также установите для выбранного индекса значение 0 uxComboBox.Index = 0.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...