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





Зависит от. Вы используете ASP.NET, Windows Forms или WPF? Вы используете фиксированный или пропорциональный шрифт?
Если вы используете Windows Forms, вам нужно будет вызвать MeasureString (), чтобы узнать, какой ширины вы хотите, чтобы текст был.
Если вы используете ASP.NET, вы можете сделать что-то вроде MeasureString (), но вы точно не знаете, какой шрифт отображается в браузере, поэтому вы не можете просто вставить это в свой скрипт.
Я действительно надеялся, что есть какой-то метод, который делает это автоматически для combobox - measureString измеряет длину строки, но, конечно, не принимает во внимание «кнопку со стрелкой вниз» combobox, поэтому вам нужно.
В этом случае ширину поля можно определить путем вычитания ширины клиента из ширины элемента управления.
См. Метод Graphics.MeasureString. http://msdn.microsoft.com/en-us/library/9bt8ty58.aspx
Если вы не укажете ширину явно, браузер отобразит ее как длину самого длинного элемента (если, конечно, вопрос касается веб-форм).
Добавьте событие 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;
}
Укажите среду, к которой относится ваш вопрос (например, Windows Forms или ASP.NET).