Моя проблема - 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
Таким образом, ни один из полей со списком, кажется, не выбран.Но возникла еще одна проблема: на полях со списком я вижу только конец выделения.Если первый пункт короткий, то все круто.Но если первый элемент длиннее, чем поле со списком, я вижу только конец элемента - но я должен элемент с самого начала.
Итак, например, мой первый элемент: «C # isочень хороший язык программирования, разработанный Андерсом Хейлсбергом «и моя комбо короче текста, я буду видеть только« разработанный Андерсом Хейлсбергом ».- Я хочу видеть "C # - очень хорошее программирование".
Я не могу переместить свойство SelectionStart в 0, потому что все мои поля со списками выбираются снова.И даже если я это сделаю, я все равно вижу конец первого элемента, а не начало - единственное отличие состоит в том, что этот элемент выбран.
Есть идеи, как увидеть текст первого элемента с самого начала?