I am making a C# program with a listview and in my PC and netbook the columns sizes are perfect, but when I run the program in my friends computer the column's size appear to be smaller, the text is being cut, for example, if my column shows "Hello Stackoverflow" in my PC, in my friend's PC it shows "Hello Stac..." . The column size is set in the code, and he is not resizing...how may this be possible? We are using the same screen resoluiton (1080p), and even if he changes the resolution to something bigger (800x600), the column text is still cut out, just the window in general is bigger...may it be a default font from windows making all this problem?? Thank you all!!
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
This may be a matter of the DPI setting. Your friend may have "large fonts" enabled. Setting fixed column widths, you need to take the DPI setting into account. 100 pixels are always 100 pixels, but changing the DPI setting makes 8pt font be larger on your friends machine than on yours.
You can easily compute this:
int columnWidth = Desired Width / 96.0 * DPI;
with Desired Width
being the number of pixels you want the column to be wide and DPI
being the horizontal DPI of the current machine.
回答2:
ListView
doesn't override the ScaleControl
method so it doesn't scale properly with DPI changes. You can do it in your form instead. This method doesn't require you to know the DPI setting. Code copied from 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);
}