我的問題是組合框,第一個項目的文本比組合框長 - 我沒有看到從開始的文本,我看到了結尾文本。我想從一開始就看到文字。我試過'SelectionStart'屬性設置爲0,但它與我的問題無關 - 它只設置從文本中選擇的位置。組合框文本比組合框可見的更長,而不是開始
更詳細的解釋:
我有我的窗體上的幾個組合框,我不得不調整他們的下拉列表寬度以適合最長的項目。所以,當我打開下拉列表時,它的寬度和最長的項目一樣長。但是,有一個問題 - 我有一個特殊的功能,經過組合框列表,早就使他們的下拉寬度最長的項目:
Public Sub MakeDropDownListWider()
Dim conKontrola As ComboBox
conKontrola = Me
'make the dropdown wider so the entire selection can be seen
If conKontrola.Items.Count > 0 Then
Dim pixlength As Graphics = Graphics.FromHwnd(New IntPtr)
Dim lengthHolding As Int32
Dim stringWidth As Int32
Dim g As Graphics = conKontrola.CreateGraphics
For Each myItem As Object In conKontrola.Items
If myItem.GetType().ToString() = "System.Data.DataRowView" Then
lengthHolding = pixlength.MeasureString(myItem.Row.Item(conKontrola.DisplayMember).ToString, conKontrola.Font).ToSize.Width
Else
lengthHolding = g.MeasureString(myItem, conKontrola.Font).Width + 15
End If
If lengthHolding > stringWidth Then
stringWidth = lengthHolding
End If
Next
Dim allowedWidth As Int32 = 0
If Me.Parent.Width > 0 Then
allowedWidth = Me.Parent.Width - conKontrola.Location.X - 10
End If
If allowedWidth > 0 And (stringWidth + 15 > allowedWidth) Then
conKontrola.DropDownWidth = allowedWidth
Else
conKontrola.DropDownWidth = stringWidth + 15 'add 15 for the scrollbar
End If
End If
End Sub
當我上的每一個組合框運行這個功能我窗體顯示後,我的所有組合框都會被選中。 (我在表單事件中調用此方法)。我不希望被選中組合框,所以我用組合框的SelectionStart財產,像這樣:
myComboBox1.SelectionStart = myComboBox1.Text.Length
這樣一來,沒有一個組合框似乎被選中。但是,又出現了另一個問題:我只看到組合框上的選擇結束。如果第一個項目很短,那麼一切都很酷。但是,如果第一個項目比組合框長,我只能看到項目的末尾 - 但是,我必須從頭開始項目。因此,f.e .:我的第一個項目是:「C#是Anders Hejlsberg設計的非常好的編程語言」,而且我的組合比文本短,我只會看到「由Anders Hejlsberg設計」。 - 我想看看「C#是一個非常好的編程」。
我無法將'SelectionStart'屬性移動到0,因爲我的所有組合框都被再次選中。即使我這樣做,我仍然看到第一個項目的結束,而不是開始 - 唯一的區別是該項目被選中。
任何想法如何從一開始就看到第一個項目的文本?