我在一家拥有Winforms应用程序作为我们旗舰产品的公司工作。 我们最近重新设计了品牌和用户界面。我们注意到,Forms现在不能正确显示文本,并且某些控件不对齐或已从边缘消失。
由于我们没有时间,因此我可以使用最少量的重新分解来在此应用程序DPI-Aware上制作表单。
答案 0 :(得分:13)
您必须不指定像素坐标和尺寸。当您将控件“放置”到表单上时,这会排除使用Control.Top
和Control.Left
,这是设计师所做的。
要获得适用于不同DPI设置的UI,几乎所有内容都必须动态调整大小。控件应启用Control.AutoSize
。但只是启用AutoSize
会完全搞砸你的布局,因为控制位置仍然是静态的。
要动态定位控件,您可以使用容器控件,例如FlowLayoutPanel
和TableLayoutPanel
(大小设置为AutoSize
)。然后,根据自动确定的尺寸,那些内部的正常控制只会在窗体周围移动。
正如您所看到的,这并不简单,需要一些经验才能使其正确并需要大量测试(具有不同DPI设置的虚拟机工作得很好)。但是我觉得应该这样做,因为如果我的笔记本电脑上出现傻瓜和笨蛋,我总是很生气。
答案 1 :(得分:-3)
最快的方法是覆盖OnPaint并使用Graphics.DpiX和DpiY属性。请参阅http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx,建议仅使用清单文件而不是SetDpiAware