ширина comboBox в зависимости от самого длинного элемента - PullRequest
1 голос
/ 21 декабря 2008

У меня есть ComboBox, который я генерирую динамически и заполняю некоторыми элементами. Я хотел бы установить ширину этого элемента управления шириной самого длинного элемента. Как рассчитать ширину отображения текста?

edit: я использую формы Windows, но я бы хотел сделать это и в asp.net

Ответы [ 4 ]

2 голосов
/ 21 декабря 2008

Зависит. Вы используете ASP.NET или Windows Forms или WPF? Вы используете фиксированный или пропорциональный шрифт?

Если вы используете Windows Forms, вам нужно вызвать MeasureString () , чтобы узнать, насколько широким должен быть текст.

Если вы используете ASP.NET, вы можете сделать что-то вроде MeasureString (), но вы точно не знаете, какой шрифт отображается в браузере, поэтому вы не можете просто вставить это в свой скрипт.

1 голос
/ 21 декабря 2008

Если вы не установили ширину явно, браузер отобразит ее как длину самого длинного элемента (если, конечно, вопрос касается веб-форм).

1 голос
/ 21 декабря 2008

См. Метод Graphics.MeasureString . http://msdn.microsoft.com/en-us/library/9bt8ty58.aspx

0 голосов
/ 07 апреля 2019

Добавьте событие DropDown к вашему списку со следующим кодом:

private void comboBox_DropDown(object sender, EventArgs e)
        {
            Graphics g = (sender as ComboBox).CreateGraphics();
            float longest = 0;
            for (int i = 0; i < (sender as ComboBox).Items.Count; i++)
            {
                SizeF textLength = g.MeasureString((sender as ComboBox).Items[i].ToString(), (sender as ComboBox).Font);

                if (textLength.Width > longest)
                    longest = textLength.Width;
            }

            if (longest > 0)
                (sender as ComboBox).DropDownWidth = (int)longest;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...