我有一个C#格式的表单应用程序。当我改变显示器的DPI时,所有的控件都会移动。我使用了代码this.AutoScaleMode = AutoScaleMode.Dpi,但它并没有避免这个问题。
有谁有主意吗?
发布于 2015-03-09 17:17:58
ScaleByDPI函数将接收一个控件参数,该参数通常是一个表单,然后递归地迭代所有子控件(如果为(control.HasChildren == true)),并缩放应用程序控件的位置和大小&字体的大小和大小到操作系统配置的DPI。你也可以尝试实现它的图像,图标和图形。
ScaleByDPI函数特别说明:
a.对于所有默认字体大小的控件,您需要将它们的Font.Size设置为8.25。
b.可以通过(control.CreateGraphics().DpiX / 96)和(control.CreateGraphics().DpiY / 96)得到devicePixelRatioX和devicePixelRatioY的值。
c.你需要基于control.Dock和control.Anchor值的算法来缩放Control.Size和Control.Location。请注意,control.Dock可能有6个可能值中的1个,而control.Anchor可能有16个可能值中的1个。
d.此算法将需要设置下一个布尔变量isDoSizeWidth,isDoSizeHeight,isDoLocationX,isDoLocationY,isDoRefactorSizeWidth,isDoRefactorSizeHeight,isDoRefactorLocationX,isDoRefactorLocationY,isDoClacLocationXBasedOnRight,isDoClacLocationYBasedOnBottom的值。
e.如果您的项目使用Microsoft控件以外的控件库,则此控件可能需要特殊处理。
有关上述内容的详细信息(d.)布尔变量:
*有时需要将一组控件(可能是一组按钮)依次放置在同一条垂直线上,其锚定值为右而不是左,或者需要将一组控件相继放置在同一条水平线上,锚定值为底而不是顶,此时需要重新计算控件的位置值。
*对于Anchor包含Top & Bottom和\or Left & Right的控件,您需要重新考虑控件的大小和位置值。
ScaleByDPI函数的用法:
a.在任何表单构造函数的末尾添加下一条命令: ScaleByDPI(this);
b.当动态地将任何控件添加到表单时,调用ScaleByDPI(ControlName)。
,请将ScaleByDPI_Size元素添加到应用程序的程序集清单中。
https://stackoverflow.com/questions/4075802
复制相似问题