2010-01-28 31 views
5

我遇到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

有誰知道爲什麼會發生這種情況?任何建議的解決方法?

謝謝!

斯蒂芬

回答

5

是的,這是ComboBox本機Windows實現中的一個已知錯誤。這個bug還有另一個方面。在你的表單上放一個按鈕並給它一個TabIndex = 0,將CB的TabIndex改爲1.運行它,該按鈕將具有焦點。調整。請注意,ComboBox的文本像以前一樣更改,但現在也會突出顯示,就好像它具有焦點一樣。儘管它沒有。

我覺得這個bug自從Vista以來一直存在,它在Win7中並沒有得到修復。沒有已知的解決方法。

+0

感謝您的信息。我們剛剛完成從VB6遷移到.NET,並且在VB6應用程序中不會發生此問題。任何想法爲什麼? – StephenM 2010-01-28 15:41:52

+0

這可能是一個主題錯誤。這些UI錯誤大部分都是。 VB6不啓用視覺樣式。並使用大量的無窗口控件。 – 2010-01-28 16:03:15

+0

很高興知道。謝謝! – StephenM 2010-01-28 16:29:54

0

加載窗體時,ComboTest被執行,你可以看到一個「6」,然而,當你調整它並不顯示新的數據,聽起來像是你需要刷新組合框,而不管調整或不調整。

嘗試uxComboBox.Refresh()後立即行uxComboBox.Items.AddRange

並且在行'ComboTest'之後,還將選定的索引設置爲0 uxComboBox.Index = 0

希望這會有所幫助, 最好的問候, 湯姆。

+0

將選定的索引設置爲0只是選擇列表中不是我想要的第一項。它需要保留我設置的「6」的值。 我試過uxComboBox.Refresh(),正如你所建議的,但沒有運氣。當我調整窗體大小時,行爲是一樣的。我甚至在表單的Resize事件中嘗試過它,但是,行爲沒有改變。 – StephenM 2010-01-28 00:48:08

+0

@StephenM:你能顯示錶單的設計器代碼嗎?在我看來,因爲組合框停靠在頂部並調整大小,組合框不會刷新。也許添加一個事件處理程序的窗體的調整大小和事件處理程序調用uxComboBox.Refresh – t0mm13b 2010-01-28 00:56:11

+0

已經嘗試過,但再次,沒有運氣。 – StephenM 2010-01-28 15:40:35

0

我使用的是Windows 10和Visual Studio 2017.看來這個bug仍在。用Hans Passant的回答,我以這種方式解決了這個問題。

我有一個組合作爲左側和右側的控件錨定,所以當表單展開時它會拉伸。當屏幕展開時,組合框文本被突出顯示,就好像它已經獲得了焦點,即使它沒有。

作爲解決方法,我將其中一個錨點關閉,並將其添加到旁邊的文本框中。現在我的組合框不會隨着屏幕展開,文本框會代替。我知道它不是一個解決所有問題的解決方案,但它可以幫助處於類似情況的人解決問題。

相關問題