Windows 窗體應用程序的預設字型
每次我在我的應用程序中創建一個新表單時,它預設使用“Microsoft Sans Serif,8.25pt”字型。我沒有更改它,因為我知道在這種情況下,我的表單應該選擇系統的預設字型。但是,當我執行我的應用程序時,使用的字型仍然是 Segoe UI(我在 Windows Vista 作業系統中的預設系統字型)。
為什麼會這樣?如何確保我的應用程序看起來像普通的 Windows 應用程序?
查看此部落格條目,討論 Forms 中的預設字型,這會導致您遇到的問題以及Microsoft 的響應中的此Connect Bug 。簡而言之,Forms 似乎沒有獲得(正確的)預設 windows 字型(您已更改)。
接受的答案並沒有真正回答問題。它只是解釋了為什麼會發生這種行為。
其他一些答案提出了可靠的解決方法,但我發現最好的解決方案確實是創建一個基本表單,應用程序中的所有表單都繼承自該基本表單,
SystemFonts.MessageBoxFont並在建構子中將此基本表單的 Font 屬性設置為。這不僅可以確保您的應用程序在執行時根據使用者的環境選擇正確的字型(避免 Hans Passant 帶來的潛在問題——沒有 Office 2007 的 XP 將在沒有 Segoe UI 的情況下求助於 Microsoft Sans Serif ),而且還為您提供了對目前 Windows 字型的**設計時支持。**在設計時使用正確的字型可以解決 Josuegomes 指出的問題,因為在表單上創建的任何容器控制項都會在設計時獲取表單使用的字型。除了上述優點之外,這使您不必記住為您創建的每個表單修改建構子,並確保應用程序中所有表單的一致性,並為您提供放置其他常用功能的位置。我以幾種不同的方式使用它,例如 p/invoking 等,以修復 WinForms 實現中的錯誤。
這種方法剩下的唯一問題是,如果您想為特定控制項設置字型樣式,例如粗體。執行此操作的最佳位置仍然是在該表單的建構子中,從表單的字型作為基礎開始並從中修改樣式:
myControl.Font = New Font(Me.Font, FontStyle.Bold)