快捷搜索:  汽车  科技

取巧有用吗(这种取巧的方法)

取巧有用吗(这种取巧的方法)也许你们也想到了,就是通过代码自动完成,思路就是检测字体是否存在,存在则继续,不存在则通过代码安装字体。一种方法就是提前手动安装好字体,然后再运行程序,但是也没有其他好的方法呢?使用7SEG字体,前提要安装这个字体,安装也很简单,双击下载的7SEG.ttf即可。最终呈现的效果如下所示:这个提及一下项目应用,如果我们开发好项目,把程序放到其他电脑上使用,由于其他电脑没有安装7SEG的字体,效果肯定会不一样。

数码管

在开发上位机UI界面时,我们常常会希望数值可以以7段数码管的形式呈现。

关于7段数码管,最早接触应该是学习单片机的时候,它可以将数字或者字母以7段字符来呈现,所以有时候也叫7段LED数码管显示。

实现思路

C#想要实现7段数码管显示,一般会有两种思路,一种是GDI ,通过代码绘制的方式来实现,今天,给大家介绍另外一种简单而又方便的方式,那就是通过设置字体,提前做好一个7段码的字体,在电脑中安装好即可,当然字体也可以用现成的,这里给大家提供一个线程的7段码字体,公众号【dotNet工控上位机:thinger_swj】回复关键词:7SEG

使用也很简单,就是拖放一个Label标签到界面上,然后设置字体选择为7SEG,设置合适的字体大小即可。

取巧有用吗(这种取巧的方法)(1)

使用7SEG字体,前提要安装这个字体,安装也很简单,双击下载的7SEG.ttf即可。

最终呈现的效果如下所示:

取巧有用吗(这种取巧的方法)(2)

项目应用

这个提及一下项目应用,如果我们开发好项目,把程序放到其他电脑上使用,由于其他电脑没有安装7SEG的字体,效果肯定会不一样。

一种方法就是提前手动安装好字体,然后再运行程序,但是也没有其他好的方法呢?

也许你们也想到了,就是通过代码自动完成,思路就是检测字体是否存在,存在则继续,不存在则通过代码安装字体。

所以首先需要第一个方法,检测某个字体是否存在,方法如下:

///<summary> ///检测某种字体样式是否可用 ///</summary> ///<paramname="familyName">字体名称</param> ///<paramname="fontStyle">字体样式</param> ///<returns></returns> privateboolCheckFont(stringfamilyName FontStylefontStyle=FontStyle.Regular) { InstalledFontCollectioninstalledFontCollection=newInstalledFontCollection(); FontFamily[]fontFamilies=installedFontCollection.Families; foreach(variteminfontFamilies) { if(item.Name.Equals(familyName)) { returnitem.IsStyleAvailable(fontStyle); } } returnfalse; }

有了这个方法之后,还需要另外一个方法就是安装字体,安装字体需要提供字体的路径,代码如下:

///<summary> ///安装字体 ///</summary> ///<paramname="fontFilePath">字体文件全路径</param> ///<returns>是否成功安装字体</returns> ///<exceptioncref="UnauthorizedAccessException">不是管理员运行程序</exception> ///<exceptioncref="Exception">字体安装失败</exception> privateboolInstallFont(stringfontFilePath) { try { System.Security.Principal.WindowsIdentityidentity=System.Security.Principal.WindowsIdentity.GetCurrent(); System.Security.Principal.WindowsPrincipalprincipal=newSystem.Security.Principal.WindowsPrincipal(identity); //判断当前登录用户是否为管理员 if(principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)==false) { thrownewUnauthorizedAccessException("当前用户无管理员权限,无法安装字体"); } //获取Windows字体文件夹路径 stringfontPath=Path.Combine(System.Environment.GetEnvironmentVariable("WINDIR") "fonts" Path.GetFileName(fontFilePath)); //检测系统是否已安装该字体 if(!File.Exists(fontPath)) { //将某路径下的字体拷贝到系统字体文件夹下 File.Copy(fontFilePath fontPath);//font是程序目录下放字体的文件夹 AddFontResource(fontPath); //安装字体 WriteProfileString("fonts" Path.GetFileNameWithoutExtension(fontFilePath) "(TrueType)" Path.GetFileName(fontFilePath)); } } catch(Exceptionex) { returnfalse; } returntrue; }

最终在项目运行初始化里执行如下代码:公众号【dotNet工控上位机:thinger_swj】

if(!CheckFont("7SEG")) { if(InstallFont(FontPath)) { MessageBox.Show("字体安装成功,重启生效!" "字体安装"); } else { MessageBox.Show("字体安装失败!" "字体安装"); } }

其中FontPath是字体文件的路径,一般可以提前方法根目录下。这样即使是没有安装字体的电脑,也可以直接正常显示了。

猜您喜欢: