C# - ListView列文本大小在每台计算机上都不相同

时间:2012-05-29 07:54:15

标签: c# listview text size

我正在制作一个带有listview的C#程序,在我的PC和上网本中,列大小是完美的,但是当我在朋友计算机上运行程序时,列的大小似乎更小,文本正在被剪切,例如如果我的专栏在我的电脑中显示“Hello Stackoverflow”,在我朋友的电脑中显示“Hello Stac ......”。列大小在代码中设置,他没有调整大小......这怎么可能?我们使用相同的屏幕resoluiton(1080p),即使他将分辨率更改为更大的值(800x600),列文本仍然被删除,只是窗口一般更大...可能是一个默认字体来自窗户制作所有这个问题? 谢谢大家!!

2 个答案:

答案 0 :(得分:4)

这可能是DPI设置的问题。您的朋友可能启用了“大字体”。设置固定列宽,需要考虑DPI设置。 100像素总是100像素,但更改DPI设置会使朋友机器上的8pt字体比您的字体大。

您可以轻松计算:

int columnWidth = Desired Width / 96.0 * DPI;

Desired Width是您希望列宽,DPI是当前机器的水平DPI的像素数。

答案 1 :(得分:3)

ListView不会覆盖ScaleControl方法,因此无法在DPI更改时正确缩放。您可以在表单中执行此操作。此方法不需要您知道DPI设置。代码从MSDN forum复制。

private void ScaleListViewColumns(ListView listview, SizeF factor)
{
    foreach (ColumnHeader column in listview.Columns)
    {
        column.Width = (int)Math.Round(column.Width * factor.Width);
    }
}

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);
    ScaleListViewColumns(listView1, factor);
}