为了账号安全,请及时绑定邮箱和手机立即绑定

如何编写自动扩展到系统字体和dpi设置的WinForms代码?

如何编写自动扩展到系统字体和dpi设置的WinForms代码?

繁星coding 2019-07-29 11:17:50
如何编写自动扩展到系统字体和dpi设置的WinForms代码?简介:有很多评论说“WinForms不能自动扩展到DPI /字体设置;切换到WPF”。但是,我认为这是基于.NET 1.1; 看起来他们在.NET 2.0中实现自动扩展实际上做得非常好。至少基于我们迄今为止的研究和测试。但是,如果你们中的一些人知道的更好,我们很乐意听取你的意见。(请不要打扰我们应该切换到WPF ...现在不是一个选项。)问题:WinForms中的内容不能正确自动缩放,因此应该避免?程序员在编写WinForms代码时应遵循哪些设计指南,以便自动扩展?到目前为止我们已确定的设计指南:请参阅下面的社区维基答案。这些是不正确还是不充分?我们应采用的其他指导方针?是否还有其他需要避免的模式?对此的任何其他指导将非常感激。
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我的经验与当前最高投票的答案完全不同。通过逐步完成.NET框架代码并仔细阅读参考源代码,我得出结论认为自动扩展工作的所有内容都已到位,并且只有一个微妙的问题在某处弄乱它。事实证明这是真的。

如果您创建一个正确可重排/自动调整大小的布局,那么几乎所有内容都应该自动运行,使用Visual Studio使用的默认设置(即,父窗体上的AutoSizeMode = Font,以及其他所有内容的Inherit)。

唯一的问题是,如果您在设计器中的表单上设置了Font属性。生成的代码将按字母顺序对分配进行排序,这意味着AutoScaleDimensions将在之前 分配Font。不幸的是,这完全打破了WinForms自动缩放逻辑。

修复很简单。要么根本不在设计器中设置Font属性(在表单构造函数中设置它),要么手动重新排序这些赋值(但是每次在设计器中编辑表单时都必须继续这样做)。Voila,几乎完美和全自动缩放,最小的麻烦。甚至表单大小也可以正确缩放。


我会在遇到它们时列出已知问题:

  • 嵌套TableLayoutPanel 计算控制边距不正确。没有已知的解决方法,完全避免边距和填充 - 或避免嵌套的表布局面板。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 780 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信