日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Winform字体统一方案

發布時間:2024/4/14 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、在一個公用文件中加入:
  私有全局變量:

Private Shared _pfc As System.Drawing.Text.PrivateFontCollection

  靜態構造函數:

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、頂級父窗體構造函數中加入:

Me.Font = ClientConfig.MyFont


4、清除所有控件的字體格式,如果有設置特殊格式(如大小、加粗等等),則用代碼實現。


附 ConfigHelper :

Public Class ConfigHelperPublic Shared Function GetString(ByVal key As String) As StringReturn System.Configuration.ConfigurationManager.AppSettings(key)End FunctionPublic Shared Function GetInteger(ByVal key As String) As IntegerDim value As IntegerIf (Integer.TryParse(GetString(key), value)) ThenReturn valueElseReturn 0End IfEnd FunctionPublic Shared Function GetDecimal(ByVal key As String) As DecimalDim value As DecimalIf (Decimal.TryParse(GetString(key), value)) ThenReturn valueElseReturn 0DEnd IfEnd FunctionPublic Shared Function GetBoolean(ByVal key As String) As BooleanDim value As BooleanIf (Boolean.TryParse(GetString(key), value)) ThenReturn valueElseReturn FalseEnd IfEnd Function End Class



附件:

  ttc2ttf.rar

轉載于:https://www.cnblogs.com/jitian/archive/2011/03/26/1994165.html

總結

以上是生活随笔為你收集整理的Winform字体统一方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。