comboBox宽度取决于最长的项目

时间:2008-12-21 15:55:19

标签: c# combobox

我有一个动态生成的ComboBox并填充了一些项目。我想将此控件的宽度设置为最长项的宽度。我如何计算某些文字的显示宽度?

编辑:我正在使用Windows窗体,但我想在asp.net中也这样做

4 个答案:

答案 0 :(得分:2)

取决于。您使用的是ASP.NET或Windows窗体还是WPF?您使用的是固定宽度还是比例字体?

如果您使用的是Windows窗体,则需要调用MeasureString()以了解文本的宽度。

如果您正在使用ASP.NET,您可以执行类似MeasureString()的操作,但您不确切知道在浏览器上呈现的字体是什么,因此您不能将其放在脚本中。< / p>

答案 1 :(得分:1)

请参阅 Graphics.MeasureString 方法。 http://msdn.microsoft.com/en-us/library/9bt8ty58.aspx

答案 2 :(得分:1)

如果您没有明确设置宽度,浏览器会将其渲染为最长项目的长度(如果问题是关于Web表单的话,当然)。

答案 3 :(得分:0)

使用以下代码向您的组合框添加一个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;
        }