c# - 创建DPI感知应用程序

我有一份C的表格申请。当我改变显示器的dpi时,所有的控件都会移动。
我使用了代码,但它并没有避免这个问题。
有人有主意吗?

最佳答案

编辑:从.NET 4.7开始,Windows窗体改进了对高dpi的支持。Read more about it on docs.microsoft.com它只适用于Win 10创建者更新和更高版本,因此根据您的用户群,使用它可能还不可行。
困难,但并非不可能。当然,您最好的选择是转移到WPF,但这可能不可行。
我花了很多时间处理这个问题。以下是一些规则/指南,可以使其在没有FlowlayOutpanel或TableLayOutpanel的情况下正常工作:
始终以默认96 dpi(100%)编辑/设计应用程序。如果你设计的是120dpi(125%f.ex),当你回到96dpi以后再使用它时,它会变得非常糟糕。
我使用了autoscalemode.font,但成功了,我没有尝试过autoscalemode.dpi。
确保在所有容器(窗体、面板、选项卡页、用户控件等)上使用默认字体大小。8.25像素最好不要在.designer.cs文件中为所有容器设置它,以便使用容器类中的默认字体。
所有容器必须使用相同的自动缩放模式
确保所有容器在designer.cs文件中都设置了以下行:
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); // for design in 96 DPI
如果需要在标签/文本框等上设置不同的字体大小,请按控件设置,而不是在容器类上设置字体,因为WinForms使用容器字体设置来缩放其内容,并且确保F.Ex面板的字体大小与包含的表单不同。D制造问题。如果表单和表单上的所有容器使用相同的字体大小,它可能会工作,但我没有尝试过。
使用另一台计算机或具有更高dpi设置的虚拟Windows安装(vmware、虚拟PC、virtualbox)立即测试您的设计。只需运行dev计算机上/bin/debug文件夹中编译的.exe文件。
我保证,如果你遵循这些指导方针,你会没事的,即使你已经放置了带有特定锚的控件,并且不使用流面板。我们有一个以这种方式构建的应用程序部署在数百台具有不同DPI设置的机器上,我们不再有任何投诉。所有窗体/容器/网格/按钮/文本字段等大小都按字体正确缩放。图像也可以工作,但它们往往会在高dpi时得到一些像素化。
编辑:这个链接有很多好的信息,特别是如果你选择使用autoscalemode.dpi:link to related stackoverflow question

本文翻译自 https://stackoverflow.com/questions/4075802/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c# dpi dpi-aware


相关文章:

c# - 将winform的元素重置为初始化状态(C#/。Net)

c# - Easyhook在vs2010上引发“无法在GAC中安装程序集”错误

android - Android drawables-将xhdpi用于hdpi

c++ - Winapi在不同机器上缩放

c# - 从使用了很多位置的数据库中删除列时,维护实体数据模型吗?

android - 规划多个屏幕的自定义屏幕布局

c# - SetProcessDpiAwareness无效

java - Java禁用dpi-aware无法正常工作

c# - C#并行-将项目添加到要迭代的集合中,还是等效?