Long text in a combo box

Posted on 2000-03-10
Last Modified: 2010-08-05

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.


Question by:mari_carmen

Expert Comment

ID: 2606241
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
  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.
LVL 15

Expert Comment

ID: 2606356
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
        Combo1.ToolTipText = ""
    End If
End Sub

Author Comment

ID: 2606376

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.

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

LVL 15

Expert Comment

ID: 2606379
Private Sub Combo1_Change()
    If Me.TextWidth(Combo1.Text) > Combo1.Width - 300 Then
        Combo1.ToolTipText = Combo1.Text
        Combo1.ToolTipText = ""
    End If
End Sub

Private Sub Combo1_Click()
End Sub
LVL 32

Expert Comment

ID: 2606392
See the code:

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

Accepted Solution

ameba earned 80 total points
ID: 2606394
Change the width of the dropdown portion of a ComboBox:

width is in pixels, to calculate it, use
 pw = Textwidth(Combo1.Text) / 15

Author Comment

ID: 2609361
Thanks, thats perfect for what i need.

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now