开发者

ComboBox text longer than the combo visible at the end instead of start

My problem is ComboBox, with the text of the first item longer than the combo - I don't see the text from the start, I see the end of the text. I wanna see text from the start. I've tried 'SelectionStart' property set to 0, but it has nothing to do with my problem - it only sets where from text is selected.

Longer explanation:

I have several combo boxes on my form, which I have to adjust theirs drop down list width to be suitable for the longest item. So, when I open drop down list, it's width is long as the longest item is. But, there is a problem - I have a special function, which goes through list of combo boxes and made theirs drop down width long as the longest item:

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        开发者_JAVA百科        
            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

When I run this function on every combo box of my form, all of my combo boxes are selected after the form is shown. (I call this method on forms shown event). I didn't wanted combo boxes to be selected, so I used SelectionStart property of combo box, like this:

myComboBox1.SelectionStart = myComboBox1.Text.Length

That way, none of the combo boxes appears to be selected. But, another problem has arised: I see only end of the selection on my combo boxes. If the first item is short, then everything is cool. But, if the first item is longer than the combo box, I see only the end of the item - but, I must the item from the start.

So, f.e.: my first item is: "C# is a very good programming language designed by Anders Hejlsberg" and my combo is shorter than the text, I will see only "designed by Anders Hejlsberg." - I wanna see "C# is a very good programming".

I can't move the 'SelectionStart' property to 0, because all of my combo boxes gets selected again. And even if I do that, I still see end of the first item, not the start - the only difference is that item is selected.

Any idea how to see the text of the first item from the start?


check that the "right to left" property is set to false. that could cause this problem. hope this helps.


You can try this:

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
  Me.BeginInvoke(New Action(Sub() ComboBox1.Select(0, 0)))
End Sub
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜