我在C#中有一个表单应用程序。当我更改监视器的DPI时,所有控件都会移动。我使用了代码this.AutoScaleMode = AutoScaleMode.Dpi,但并不能避免该问题。
this.AutoScaleMode = AutoScaleMode.Dpi
有人有主意吗?
编辑:从.NET 4.7开始,Windows窗体改进了对High DPI的支持。在docs.microsoft.com上了解有关此内容的更多信息,但它仅适用于Win 10 Creators Update和更高版本,因此根据用户群的不同,可能尚不可行。
困难,但并非不可能。最好的选择当然是转到WPF,但这可能不可行。
我花了很多时间解决这个问题。以下是一些规则/准则,可使其在没有FlowLayoutPanel或TableLayoutPanel的情况下正常工作:
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); // for design in 96 DPI
我保证,即使您已将控件放置在具有特定锚点且不使用流程图的面板上,也可以遵循这些准则。我们以这种方式构建了一个应用程序,该应用程序可在具有不同DPI设置的数百台机器上部署,并且不再有任何投诉。所有表单/容器/网格/按钮/文本字段等大小均按字体正确缩放。图像也可以工作,但是在高DPI时它们往往会有点像素化。
编辑:此链接具有很多好的信息,尤其是如果您选择使用AutoScaleMode.DPI:链接到相关的stackoverflow问题