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