C# 字体类型: FontFamily and FontStyle
在Windows Forms项目中使用Font、FontFamily和FontStyle。
Font:
字体类型代表一种书体(fontface和font的具体区别可见知乎 https://www.zhihu.com/question/19566628),它存在于.net框架中---并在C#程序中使用。我们可以用它的构造函数创建一个字体类型的实例,然后,我们使用返回的引用指定书体。
Constructor:
这个示例是一个WindowsForms项目,并且它使用的是最简单的Font构造函数。我们指定一个字体名字(“Times New Roman”)做为第一个参数。第二个参数是float类型,用于指定大小。
小贴士:如果第二个参数的数字格式产生错误,使用“f”后缀来指定数字是float类型。
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace WindowsFormsApplication9 11 { 12 public partial class Form1 : Form 13 { 14 public Form1() 15 { 16 InitializeComponent(); 17 } 18 19 private void Form1_Load(object sender, EventArgs e) 20 { 21 Font font = new Font("Times New Roman",12.0f); 22 //设置字体属性,然后添加Label 23 this.Font = font; 24 this.Controls.Add(new Label() { Text = "TheDevCodes"}); 25 26 this.Size = new Size(500,200); 27 } 28 } 29 }
程序中创建的继承字体的新标签会显示出来。著名的Times New Roman字体面用于渲染文本。
FontStyle, FontFamily:
接下来,我们演示一个更复杂的构造函数。我们介绍FontFamily类型。这个类型描述了一个特定的字体族,比如“Times New Roman”族。FontFamily不包含任何样式、大小 或其它信息。
在Font构造函数中,我们使用按位或运算符来指定FontStyle。这用于带有[Flags]特性的枚举。
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace WindowsFormsApplication10 11 { 12 public partial class Form1 : Form 13 { 14 public Form1() 15 { 16 InitializeComponent(); 17 } 18 19 private void Form1_Load(object sender, EventArgs e) 20 { 21 FontFamily family = new FontFamily("Times new Roman"); 22 Font font = new Font(family,16.0f, 23 FontStyle.Bold|FontStyle.Italic|FontStyle.Underline); 24 25 this.Font = font; 26 this.Controls.Add(new Label() { Text = "The Dev Codes",Width = 250}); 27 this.Size = new Size(300,200); 28 } 29 } 30 }
结果:项目展示了黑体、倾斜、下划线的“Times New Roman”字体标签。
字体是否存在?
在这里,我们选择最好的字体为项目开发代码。当系统上不存在某种字体时,WindowsForms在对待字体对象上会有一个有趣的行为。
它根本不会创建新字体,因此,你可以检查是否发生了这种情况,看看字体是否存在。
SetFontFinal此函数使用逻辑对字体是否存在进行测试。字体为“Cambria”,一直不存在的。
Name 在我们创建新的Font对象后,我们可以测试它的Name属性;如果名称“Cambria”仍然可以设置,则字体存在。
But 如果名称属性和指定的不一致,则字体不存在。那样的话我们就会使用另一个字体。
public partial class Form1 : Form { public Form1() { SetFontFinal(); InitializeComponent(); } private void SetFontFinal() { string fontName = "Cambria"; Font testFont = new Font(fontName, 16.0f, FontStyle.Regular, GraphicsUnit.Pixel); if (testFont.Name == fontName) { // The font exists, so use it. this.Font = testFont; } else { // The font we tested doesn't exist, so fallback to Times. this.Font = new Font("Times New Roman", 16.0f, FontStyle.Regular, GraphicsUnit.Pixel); } } }
Bold, italic, underline.字体类型还提供粗体、斜体和下划线的属性。这些属性是只读的。你可以访问他们来决定字体设置的样式。
Font.Style.Style属性会告诉你在Font实例上设置了哪些样式,但是,你不能修改他们。相反地,你可以用构造函数来创建新的字体。
FontFamily.FontFamily表示有别于字体样式的字体族。比如你在程序中使用了几种不同大小和样式的字体“Times New Roman”。
使用FontFamily,只需要一个FontFamily实例就可以了。这可以减少字符串使用导致的错误。
总结:字体类型在图形程序中很有用。它不能代表字体的颜色,但它确实存储了字体有关样式、大小和typeface的信息。