我想设置我的ListBox.Width属性,使其不比需要更宽或更窄,以便显示其中的项目。 ListBox左边和文本开头之间有一些像素的边距 - 我希望在右边有一个类似的边距。 (即不应有很大的间隙,字母不应接触右边缘。)
鉴于我不确定给定字符串的像素数,我不知道如何计算这个宽度。
答案 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();