Winform字体统一方案
在 Winform 程序開(kāi)發(fā)中,要求統(tǒng)一整個(gè)UI的字體,否則這個(gè)地方是“宋體”,那個(gè)地方是“楷體”,感覺(jué)很雜亂。
還有一個(gè)原因是,當(dāng)在不同語(yǔ)言環(huán)境下,字體名稱也會(huì)有所不同,就用“mingliu.ttc”作例子,在“中文(PRC)”下為“MingLiU、PMingLiU”;在“中文(香港特別行政區(qū))”下為“細(xì)明體、新細(xì)明體”。
如果你在“中文(PRC)”下將字體設(shè)置為“PMingLiU”,那在“中文(香港特別行政區(qū))”下,則會(huì)因?yàn)檎也坏皆撟煮w,繼而啟用系統(tǒng)默認(rèn)字體,這是很糟糕的事情,因?yàn)檫@種情況下,你程序中 Label 的文本可能會(huì)顯示不完全或變長(zhǎng)覆蓋了后面的控件。
同時(shí),考慮到客戶端系統(tǒng)中,可能無(wú)開(kāi)發(fā)中使用的字體,以及分發(fā)安裝時(shí)的便攜性,我采用了附帶字體文件,并使用 PrivateFontCollection 類讀取字體文件。
一開(kāi)始我使用 PrivateFontCollection 讀取字體文件,然后用 FontFamily 數(shù)組的 Index 確定使用哪一個(gè)字體,但是在使用中發(fā)現(xiàn)了問(wèn)題:
“中文(PRC)”使用 PrivateFontCollection 讀取它后,FontFamily 數(shù)組為:
0: MingLiU
1: PMingLiU
“中文(香港特別行政區(qū))”使用 PrivateFontCollection 讀取它后,FontFamily 數(shù)組為:
0: 新細(xì)明體
1: 細(xì)明體
你發(fā)現(xiàn)了沒(méi)?序號(hào)反了,這樣就無(wú)法用序號(hào)確定用哪一個(gè)字體。所以我就用 ttc2ttf 將其分離成單獨(dú)的 ttf 文件,只用需要的那一個(gè)。(工具在最下面有提供下載)
下面是具體實(shí)現(xiàn):
1、Config 文件加入:
<appSettings><add key="FontFileName" value ="pmingliu.ttf"/> </appSettings>
2、在一個(gè)公用文件中加入:
私有全局變量:
靜態(tài)構(gòu)造函數(shù):
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、頂級(jí)父窗體構(gòu)造函數(shù)中加入:
4、清除所有控件的字體格式,如果有設(shè)置特殊格式(如大小、加粗等等),則用代碼實(shí)現(xiàn)。
附 ConfigHelper :
附件:
ttc2ttf.rar
轉(zhuǎn)載于:https://www.cnblogs.com/jitian/archive/2011/03/26/1994165.html
總結(jié)
以上是生活随笔為你收集整理的Winform字体统一方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OnPaint()函数的作用原理
- 下一篇: 一个Json在线格式化的网站