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.

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

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 utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
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…

832 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