0

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

4

2 回答 2

5

ListView不会覆盖该ScaleControl方法,因此它不会随着 DPI 更改而正确缩放。您可以改为在表单中执行此操作。此方法不需要您知道 DPI 设置。从MSDN 论坛复制的代码。

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);
}
于 2016-05-02T02:13:40.207 回答
4

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

您可以轻松计算:

int columnWidth = Desired Width / 96.0 * DPI;

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

于 2012-05-29T07:59:16.453 回答