如何編寫自動擴展到系統字體和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
計算控制邊距不正確。沒有已知的解決方法,完全避免邊距和填充 - 或避免嵌套的表布局面板。
- 3 回答
- 0 關注
- 822 瀏覽
添加回答
舉報
0/150
提交
取消