在 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字体统一方案相关推荐

  1. keil—MDK字体配色方案

    keil-MDK字体配色方案 关于MDK字体颜色的配置,由于个人有点强迫症,对于颜色以及代码的美观性都有较高的要求,可以让大家看看我的keil的字体配色. 配置keil的字体颜色主要是在keil的工具 ...

  2. 华为harmonyos认证,统一品牌、统一体验、统一方案、统一平台!厉害了华为HarmonyOS...

    HarmonyOS开始扩充自己的朋友圈了! 作为华为面向万物互联时代打造的智能终端操作系统,HarmonyOS为不同设备的智能化.互联与协同提供统一的语言. 华为在5月18日的HarmonyOS Co ...

  3. 微信iOS多设备多字体适配方案总结

    一.背景 2014下半年,微信iOS版先后适配iPad, iPhone6/6plus.随着这些大屏设备的登场,部分用户觉得微信的字体太小,但也有很多用户不喜欢太大的字体.为了满足不同用户的需求,我们做 ...

  4. canvas中文显示乱码 html5_浅析HTML5 Canvas的几种中文字体缩小方案

    Canvas留下的坑远比我想象中的要多, 最近碰上一个很少见的需求--在Canvas上绘制大小小于12px的文字. 如果只是简单的去设定context的font属性, 来绘制点阵字体, 比如7px的宋 ...

  5. 程序员常用字体(vs2008字体修改方案)

    字体不仅是设计师手中重要的武器,对我们开发人员来说,字体的选择也有许多讲究,一个好的.适合展示代码的字体,应该具备以下要素: 等宽的字符 简洁.清晰并且规范的字符形状 支持ASCII码为128以上的扩 ...

  6. html5字体统一解决方案

    背景介绍: 因为项目有涂鸦同步的功能 ( 例如在电脑上画一条直线 需要把这条直线同步到各种端) 所以需要保证h5内容区域在各种设备上都保持一致 众所周知 字体在不同设备平台上 支持程度是不一样的 那么 ...

  7. Ubuntu 中文字体美化方案大全 (1): 概述篇

    其实,Ubuntu自带的默认UMING中文字体,已经看得过去了.如果对中文显示没有什么特殊的要求,也够用了. 不过,很多用惯了Windows或者苹果系统的Ubuntu用户还是觉得Ubuntu的字体不够 ...

  8. 软件研发流程规范统一方案

    目录 1. 软件研发生命周期 2. 协同效率 2.1 组织协调性 2.2 集中统一的平台工具支持 2.2.1 DevOps 2.2.2 云原生时代的Devops平台 2.2.3 效能平台工具集成 2. ...

  9. 解决Win10缩放导致c# Winform字体模糊

    问题 现在的电脑分辨率很高,Win10很人性化的提供了屏幕缩放功能,一般默认放大比例为150%.200%等,如下图所示,在这种情况下,我们用VS开发的Winform窗体显示就有问题了,文字和图像都变得 ...

最新文章

  1. 狎昵关系和依恋情结辨诠
  2. c++ 返回对象的引用要小心
  3. android 手动 打包,android 手动打包apk
  4. Vue利用Vue.extend()实现自定义弹出框
  5. Linux mysql 登录 2002,Linux 下 Mysql error 2002 错误解决
  6. 一起开心2020暑假训练第一周
  7. linux6.5双屏显示,Redhat 6.5的系统如何设置双显示屏,急急急!
  8. 万兆安全网关选型指南
  9. 前后端分离 前端页面验证码没有显示
  10. 太原市智能家居行业协会成立
  11. 初步了解java虚拟机
  12. 怎么使用计算机操作鼠标,新手学电脑如何使用鼠标
  13. Unity 异步加载图片
  14. switch之enum
  15. resnet50结构图
  16. CTF-Crypto 密码解密python脚本(一)
  17. 4.28 前端开发日报
  18. 【机器人工具箱学习笔记】第七章 机械臂运动学
  19. 双驰智能足球鞋及AMAZFIT 羚羊轻户外跑鞋双双入围2018年中国优秀工业设计奖
  20. MyBatis-Plus--自定义SQL

热门文章

  1. Erlang的散列数据结构
  2. Boke宝贝 - 免费提供图片存储空间、计数器、留言板
  3. Exchange 2007 接收zip附件邮件时退信
  4. 四路由器的OSPF DR ,BDR
  5. [JavaScript] FireBug 调试
  6. 说给做管理软件的同行:你们得学会职业规划
  7. Windows Server 2008虚拟化功能解析
  8. ViewPager的事件冲突的解决
  9. 【Android】进程
  10. 漫谈Google的Native Client(NaCl)技术