我的问题是ComboBox,第一个项目的文本长于组合 - 我从一开始就看不到文本,我看到文本的结尾。我想从一开始就看文字。我已经尝试将'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,因为我的所有组合框都会再次被选中。即使我这样做,我仍然看到第一个项目的结束,而不是开始 - 唯一的区别是项目被选中。
知道如何从头开始查看第一个项目的文本吗?
答案 0 :(得分:1)
检查“从右到左”属性是否设置为false。这可能会导致这个问题。希望这有帮助。
答案 1 :(得分:1)
你可以试试这个:
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Me.BeginInvoke(New Action(Sub() ComboBox1.Select(0, 0)))
End Sub