Long text in a combo box

Hi,

I am having a problem with the combo box. I have set the physical size of the control (which is already pretty long) quite long because of the text it holds (some really long sentences). So when I select the combo box, any text that is long it cuts the end off.

I have two questions about this:

1. Can I set a property on this control, so when its selected it opens up to the size of the longest text in it. Or..

2. If the text is longer than the length of the control, automatically place a vertical control bar, so the user can scroll across to see the full length of the option.

Can both of these be accomplished. Let me know.

Thanks.

Mari
mari_carmenAsked:
Who is Participating?
 
amebaConnect With a Mentor Commented:
Change the width of the dropdown portion of a ComboBox:
http://www.vb2themax.com/Item.asp?PageID=TipBank&ID=115

width is in pixels, to calculate it, use
 pw = Textwidth(Combo1.Text) / 15
0
 
VbmasterCommented:
You can go thru all the items in the combobox checking the width of all items, using code like this...

  Dim a As Integer
  Dim MaxWidth As Long
  Dim CurrWidth As Long
  Dim MeFont As New StdFont
 
  'If you want you can set MaxWidth to prevent the Combobox
  'to be more narrow than a specific value
  'MaxWidth = (MinWidth)

  MeFont = Me.Font
  Me.Font = Combo1.Font
  For a = 1 To Combo1.ListCount
    CurrWidth = Me.TextWidth(Combo1.List(a - 1))
    If (CurrWidth > MaxWidth) Then MaxWidth = CurrWidth
  Next
  Combo1.Width = MaxWidth + 30 * Screen.TwipsPerPixelX
  Me.Font = MeFont


This code uses the Me.Font property (only temporary, the property is restored when the code has executed) to be able to use the Me.TextWidth function, if you do not want to use this way there is a way to calculate the width of a string using API's.. a little bit more complex but it's doable. Let me know and I can post that code.
0
 
amebaCommented:
Use ToolTipText property of your combobox to present the whole text, e.g.:

Option Explicit

Private Sub Form_Load()
    Combo1.AddItem "Normal Item1"
    Combo1.AddItem "Normal Item2"
    Combo1.AddItem "Very, very, very, very, very, very, long Item1"
    Combo1.AddItem "Very, very, very, very, very, very, long Item2"
End Sub

Private Sub Combo1_Change()
    ' make sure form and Combo1 use the same font
    If Me.TextWidth(Combo1.Text) > Combo1.Width Then
        Combo1.ToolTipText = Combo1.Text
    Else
        Combo1.ToolTipText = ""
    End If
End Sub
0
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
mari_carmenAuthor Commented:
VBmaster,

The problem is I do not want to change the size of the actual combo box.

When you click the combo and it shows the list, is there anyway of displaying that part (list part) to the length of the longest text.

Mari
0
 
amebaCommented:
'or
Private Sub Combo1_Change()
    If Me.TextWidth(Combo1.Text) > Combo1.Width - 300 Then
        Combo1.ToolTipText = Combo1.Text
    Else
        Combo1.ToolTipText = ""
    End If
End Sub

Private Sub Combo1_Click()
    Combo1_Change
End Sub
0
 
Erick37Commented:
See the code:

"Changing the Dropdown Width of a Combo Box, Advanced"

http://www.mvps.org/vbnet/code/listapi/combowidthadv.htm
0
 
mari_carmenAuthor Commented:
Thanks, thats perfect for what i need.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.