Как сделать выпадающий список ComboBox изменить размер, чтобы соответствовать самому большому элементу?

у меня есть DataGridView с ComboBox в нем могут содержаться довольно большие строки. Есть ли способ расширить раскрывающийся список или, по крайней мере, wordwrap строк, чтобы пользователь мог видеть всю строку без необходимости изменять размер ComboBox ширина столбца?

3 ответов


вот что я сделал, чтобы решить эту, работает отлично...

public class ImprovedComboBox : ComboBox
{
    public ImprovedComboBox()
    {



    }
    public object DataSource
    {
        get { return base.DataSource; }
        set { base.DataSource = value; DetermineDropDownWidth(); }

    }
    public string DisplayMember
    {
        get { return base.DisplayMember; }
        set { base.DisplayMember = value; DetermineDropDownWidth(); }

    }
    public string ValueMember
    {
        get { return base.ValueMember; }
        set { base.ValueMember = value; DetermineDropDownWidth(); }

    }
    private void DetermineDropDownWidth()
    {

        int widestStringInPixels = 0;
        foreach (Object o in Items)
        {
            string toCheck;
            PropertyInfo pinfo;
            Type objectType = o.GetType();
            if (this.DisplayMember.CompareTo("") == 0)
            {
                toCheck = o.ToString();

            }
            else
            {
                pinfo = objectType.GetProperty(this.DisplayMember);
                toCheck = pinfo.GetValue(o, null).ToString();

            }
            if (TextRenderer.MeasureText(toCheck, this.Font).Width > widestStringInPixels)
                widestStringInPixels = TextRenderer.MeasureText(toCheck, this.Font).Width;
        }
        this.DropDownWidth = widestStringInPixels + 15;
    }
}

Это очень элегантное решение:

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;
}

отрегулируйте ширину выпадающего списка выпадающего списка на самую длинную ширину строки http://www.codeproject.com/KB/combobox/ComboBoxAutoWidth.aspx

источник: вычисление выпадающего списка ComboBox в C#


Не то, что я знаю, хотя некоторые браузеры достаточно умны, чтобы расширить ширину выпадающего меню за пределы окна, если это необходимо. Я знаю, что Firefox и Chrome могут это сделать, если вы можете немного контролировать свою пользовательскую базу.

Если вы действительно в отчаянии, как насчет флэш-поля со списком, отправляющего данные обратно в html?