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

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

简介:有很多评论说“WinForms不能自动扩展到DPI /字体设置;切换到WPF”。但是,我认为这是基于.NET 1.1; 看起来他们在.NET 2.0中实现自动扩展实际上做得非常好。至少基于我们迄今为止的研究和测试。但是,如果你们中的一些人知道的更好,我们很乐意听取你的意见。(请不要打扰我们应该切换到WPF ...现在不是一个选项。)

问题:

  • WinForms中的内容不能正确自动缩放,因此应该避免?

  • 程序员在编写WinForms代码时应遵循哪些设计指南,以便自动扩展?

到目前为止我们已确定的设计指南:

请参阅下面的社区维基答案

这些是不正确还是不充分?我们应采用的其他指导方针?是否还有其他需要避免的模式?对此的任何其他指导将非常感激。


繁星coding
浏览 781回答 3
3回答

汪汪一只猫

我的经验与当前最高投票的答案完全不同。通过逐步完成.NET框架代码并仔细阅读参考源代码,我得出结论认为自动扩展工作的所有内容都已到位,并且只有一个微妙的问题在某处弄乱它。事实证明这是真的。如果您创建一个正确可重排/自动调整大小的布局,那么几乎所有内容都应该自动运行,使用Visual Studio使用的默认设置(即,父窗体上的AutoSizeMode = Font,以及其他所有内容的Inherit)。唯一的问题是,如果您在设计器中的表单上设置了Font属性。生成的代码将按字母顺序对分配进行排序,这意味着AutoScaleDimensions将在之前 分配Font。不幸的是,这完全打破了WinForms自动缩放逻辑。修复很简单。要么根本不在设计器中设置Font属性(在表单构造函数中设置它),要么手动重新排序这些赋值(但是每次在设计器中编辑表单时都必须继续这样做)。Voila,几乎完美和全自动缩放,最小的麻烦。甚至表单大小也可以正确缩放。我会在遇到它们时列出已知问题:嵌套TableLayoutPanel 计算控制边距不正确。没有已知的解决方法,完全避免边距和填充 - 或避免嵌套的表布局面板。
打开App,查看更多内容
随时随地看视频慕课网APP