我有一个动态生成并填充一些项目的组合框。我想将此控件的宽度设置为最长项目的宽度。如何计算某些文本的显示宽度?
编辑:我正在使用 Windows 窗体,但我也想在 asp.net 中这样做
依靠。您使用的是 ASP.NET 还是 Windows 窗体或 WPF?您使用的是固定宽度还是比例字体?
如果您使用的是 Windows 窗体,您将需要调用MeasureString()以了解您希望文本的宽度。
如果您使用的是 ASP.NET,则可以执行 MeasureString() 之类的操作,但您不知道浏览器上正在呈现什么字体,因此您不能只将其放入脚本中。
请参阅Graphics.MeasureString方法。 http://msdn.microsoft.com/en-us/library/9bt8ty58.aspx
如果您没有明确设置宽度,浏览器会将其呈现为最长项目的长度(当然,如果问题是关于 Web 表单的)。
使用以下代码将 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;
}