C#设置ListBox宽度,使最长的项目适合

时间:2011-05-19 01:39:30

标签: c# winforms listbox

我想设置我的ListBox.Width属性,使其不比需要更宽或更窄,以便显示其中的项目。 ListBox左边和文本开头之间有一些像素的边距 - 我希望在右边有一个类似的边距。 (即不应有很大的间隙,字母不应接触右边缘。)

鉴于我不确定给定字符串的像素数,我不知道如何计算这个宽度。

3 个答案:

答案 0 :(得分:6)

我相信你正在寻找Graphics类的MeasureString方法。

试试这个:

Graphics graphics = this.createGraphics();
SizeF mySize = graphics.MeasureString("Ahoy there", this.Font);

希望这有帮助!

答案 1 :(得分:0)

这可能就是你想要的。还可以使用积分高度和填充。

http://www.codeproject.com/KB/combobox/resizablelistbox.aspx

答案 2 :(得分:-1)

这对我有用,直到我改变列表框的宽度才看到我想要的结果。我循环浏览列表框中的项目以获得最长时间。希望这会有所帮助。

int LongestItemLength = 0;
for (int i = 0; i < listBox1.Items.Count;i++ ){
    Graphics g = listBox1.CreateGraphics();
    int tempLength = Convert.ToInt32((
            g.MeasureString(
                    listBox1.Items[i].ToString(), 
                    this.listBox1.Font
                )
            ).Width);
    if (tempLength > LongestItemLength){
        LongestItemLength = tempLength;
    }
}
listBox1.Width = LongestItemLength;
listBox1.Show();