Winform字体统一方案
在 Winform 程序開發中,要求統一整個UI的字體,否則這個地方是“宋體”,那個地方是“楷體”,感覺很雜亂。
還有一個原因是,當在不同語言環境下,字體名稱也會有所不同,就用“mingliu.ttc”作例子,在“中文(PRC)”下為“MingLiU、PMingLiU”;在“中文(香港特別行政區)”下為“細明體、新細明體”。
如果你在“中文(PRC)”下將字體設置為“PMingLiU”,那在“中文(香港特別行政區)”下,則會因為找不到該字體,繼而啟用系統默認字體,這是很糟糕的事情,因為這種情況下,你程序中 Label 的文本可能會顯示不完全或變長覆蓋了后面的控件。
同時,考慮到客戶端系統中,可能無開發中使用的字體,以及分發安裝時的便攜性,我采用了附帶字體文件,并使用 PrivateFontCollection 類讀取字體文件。
一開始我使用 PrivateFontCollection 讀取字體文件,然后用 FontFamily 數組的 Index 確定使用哪一個字體,但是在使用中發現了問題:
“中文(PRC)”使用 PrivateFontCollection 讀取它后,FontFamily 數組為:
0: MingLiU
1: PMingLiU
“中文(香港特別行政區)”使用 PrivateFontCollection 讀取它后,FontFamily 數組為:
0: 新細明體
1: 細明體
你發現了沒?序號反了,這樣就無法用序號確定用哪一個字體。所以我就用 ttc2ttf 將其分離成單獨的 ttf 文件,只用需要的那一個。(工具在最下面有提供下載)
下面是具體實現:
1、Config 文件加入:
<appSettings><add key="FontFileName" value ="pmingliu.ttf"/> </appSettings>
2、在一個公用文件中加入:
私有全局變量:
靜態構造函數:
Shared Sub New()Try_pfc = New System.Drawing.Text.PrivateFontCollection()Dim fontFileName As String = ConfigHelper.GetString("FontFileName")_pfc.AddFontFile(System.IO.Path.Combine(Application.StartupPath, fontFileName))ClientConfig.MyFont = New Font(_pfc.Families(0), 9.0!)CatchMyFont = System.Drawing.SystemFonts.DefaultFontEnd Try End Sub
3、頂級父窗體構造函數中加入:
4、清除所有控件的字體格式,如果有設置特殊格式(如大小、加粗等等),則用代碼實現。
附 ConfigHelper :
附件:
ttc2ttf.rar
轉載于:https://www.cnblogs.com/jitian/archive/2011/03/26/1994165.html
總結
以上是生活随笔為你收集整理的Winform字体统一方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OnPaint()函数的作用原理
- 下一篇: 一个Json在线格式化的网站