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的信息。

 

posted @ 2022-06-15 23:19  chenlight  阅读(5210)  评论(1编辑  收藏  举报