Текст ComboBox длиннее, чем комбо, видимый в конце вместо начала - PullRequest
0 голосов
/ 28 сентября 2011

Моя проблема - 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, потому что все мои поля со списками выбираются снова.И даже если я это сделаю, я все равно вижу конец первого элемента, а не начало - единственное отличие состоит в том, что этот элемент выбран.

Есть идеи, как увидеть текст первого элемента с самого начала?

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Вы можете попробовать это:

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
  Me.BeginInvoke(New Action(Sub() ComboBox1.Select(0, 0)))
End Sub
1 голос
/ 18 ноября 2011

проверьте, что для свойства "right to left" установлено значение false.это может вызвать эту проблему.надеюсь, это поможет.

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