如何在C#中更改标签的字体

22
一个带有标签和按钮“选项”的表单。 点击按钮会打开一个新的表单,其中包含2个单选按钮“字体1”和“字体2”,以及两个按钮“应用”和“取消”。 选择其中一个单选按钮并点击“应用”将使第一个表单上的标签更改字体。问题是如何更改字体,例如从Tahoma更改为Arial或标签的任何其他字体。
应用按钮的选项表单代码,如果单击它,将返回dialogresult.ok == true并更改第一个表单上标签的字体:
private void btnApply_Click(object sender, EventArgs e)
{
    if (radioFont1.Checked)
    {
        mainForm.lblName.Font.Name = "Arial"; 'wrong attempt 
    }
    this.DialogResult = DialogResult.OK;
}

在第一个表单上声明标签,以便第二个表单可以看到:

public static Label lblName = new Label();

...

private void mainForm_Load(object sender, EventArgs e)
{
    lblName = lblBarName;
}
5个回答

43

Font.Name, Font.XYZProperty等都是只读的,因为Font是一个不可变对象,所以您需要指定一个新的Font对象来替换它:

mainForm.lblName.Font = new Font("Arial", mainForm.lblName.Font.Size);

查看Font类的构造函数以获取更多选项。


字体“Arial”不支持样式“Regular”。这是什么意思? - TheEnd
字体本身是不可变的;不仅仅是名称属性。 - Aaron McIver
@Aaron - 我说 Font.XYZProperty 是为了推断所有属性。我忘记了描述它的词语,所以谢谢你提醒我:)。 - djdd87
1
@TheEnd - 对我来说,似乎你的默认Arial字体已被替换。Arial没有正常样式是没有道理的,因为它是一种基本字体。尝试使用FontStyle.BoldFontStyle.Italic进行设置。您可能需要从Windows CD中获取字体。您可以通过转到记事本,然后格式...>字体来检查它是否存在。选择Arial,我打赌Regular不会列出。 - djdd87
有点奇怪,但将“Arial”替换为“Arial Black”可以使整个东西正常工作。也许我的“Arial”字体已经损坏了。 - TheEnd
显示剩余2条评论

9

一旦创建了字体,就无法更改 - 因此您需要创建一个新的字体:

  mainForm.lblName.Font = new Font("Arial", mainForm.lblName.Font.Size);

感谢您抽出时间回答我的问题。 - TheEnd

4
你需要创建一个新的字体。
mainForm.lblName.Font = new Font("Arial", mainForm.lblName.Font.Size);

感谢您抽出时间回答我的问题。 - TheEnd

0

我注意到没有一个实际的完整代码答案,所以当我遇到这个问题时,我创建了一个函数来改变字体,这个函数可以很容易地修改。我已经在XP SP3和Win 10 Pro 64上测试过了。

- XP SP3和Win 10 Pro 64

private void SetFont(Form f, string name, int size, FontStyle style)
{
    Font replacementFont = new Font(name, size, style);
    f.Font = replacementFont;
}

提示:将表单替换为标签、RichTextBox、文本框或任何其他使用字体更改字体的相关控件。通过使用上述函数,使其完全动态化。
    /// To call the function do this.
    /// e.g in the form load event etc.

public Form1()
{
      InitializeComponent();
      SetFont(this, "Arial", 8, FontStyle.Bold);  
      // This sets the whole form and 
      // everything below it.
      // Shaun Cassidy.
}

如果你想要一个完整的库,这样你就不必编写所有的后端代码,你也可以从Github下载我的dll。

Github DLL

/// and then import the namespace
using Droitech.TextFont;

/// Then call it using:
TextFontClass fClass = new TextFontClass();
fClass.SetFont(this, "Arial", 8, FontStyle.Bold);

简单。


0
这个.lblMessage.Font = new Font("arial", this.lblName.Font.Size);

1
请编辑您的答案,并解释您的代码如何解决问题。 - Our Man in Bananas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接