WinForms不同的DPI布局

Who*_*Now 4 .net c# dpi font-size winforms

以某种方式通过Visual Studio创建的表单和控件,设计器具有很强的自我扩展能力,具体取决于Windows的当前DPI /字体大小.我的UI的一部分是一个标签控件,其中包含动态页面和标签/输入,具体取决于用户的选择.创建这些时,它们使用的硬编码尺寸适合96 DPI.

在.Net中是否有自动方式来获取这些生成的控件并执行与设计器生成的控件相同的调整大小?我想避免自己扩展控件,因为这是旧代码不易维护.

Han*_*ant 9

好吧,通过迭代标签页的控件集合并将点和大小属性乘以缩放因子,技术上很容易.但是,一旦开始考虑Dock和Anchor属性,这就变得非常棘手.

到目前为止,最简单的方法是让Form类缩放机器为您完成工作.在Load事件运行之前,您需要将控件添加到选项卡页面.在构造函数中执行此操作.

快速提示,以避免切换DPI设置以测试代码的痛苦:将其添加到表单构造函数以调用重新缩放逻辑:

protected override void OnLoad(EventArgs e) {
    this.Font = new Font(this.Font.FontFamily, this.Font.Size * 120 / 96);
    base.OnLoad(e);
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,扩展由ContainerControl实现.像Form一样,UserControl来自它. (2认同)