Introduction
This small snippet of code will show you how to automatically adjust the size of the drop down list of a combo box to fit the size of the longest string in its items.
Code
Step 1: Add an event handler for the DropDown
event of the combo box. Call it AdjustWidthComboBox_DropDown
for the sake of the following code.
Step 2: Add the following event handler code.
private void AdjustWidthComboBox_DropDown(object sender, System.EventArgs e)
{
ComboBox senderComboBox = (ComboBox)sender;
int width = senderComboBox.DropDownWidth;
Graphics g = senderComboBox.CreateGraphics();
Font font = senderComboBox.Font;
int vertScrollBarWidth =
(senderComboBox.Items.Count>senderComboBox.MaxDropDownItems)
?SystemInformation.VerticalScrollBarWidth:0;
int newWidth;
foreach (string s in ((ComboBox)sender).Items)
{
newWidth = (int) g.MeasureString(s, font).Width
+ vertScrollBarWidth;
if (width < newWidth )
{
width = newWidth;
}
}
senderComboBox.DropDownWidth = width;
}
Explanation
The code assumes that the handler is only for a ComboBox
and does a cast without checking the type of the sender.
It then gets the Graphics
and Font
objects for the combo box which will help us to measure the size of the string in the list.
senderComboBox.Items.Count>senderComboBox.MaxDropDownItems
checks whether a scrollbar will be displayed. If it is going to be displayed, then we get its width to adjust the size of the drop down list accordingly.
We then scroll through the list of items checking the size of each item and finally setting the width of the drop down list to the width of the largest item including scroll bar width.