【问题标题】:C# How to change font of a labelC#如何更改标签的字体
【发布时间】:2011-06-23 18:43:28
【问题描述】:

带有标签和按钮“选项”的表单。通过单击该按钮,将打开一个带有 2 个单选按钮“Font1”和“Font2”以及两个按钮“应用”和“取消”的新表单。选择一个单选按钮并单击“应用”后,第一个表单上的标签会更改字体。问题是如何将字体从 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;
}

【问题讨论】:

    标签: c# winforms fonts label


    【解决方案1】:

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

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

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

    【讨论】:

    • 字体“Arial”不支持“Regular”样式。这是什么意思?
    • 字体整体是不可变的;不仅仅是 Name 属性
    • @Aaron - 我说Font.XYZProperty 推断所有属性。我忘记了描述它的词,所以谢谢你提醒我:)。
    • @GenericTypeTea 我的评论是在您编辑和添加 XYZProperty 参考之前...欢迎您:)
    • @TheEnd - 在我看来,您的默认 Arial 字体已被替换。 Arial 没有理由不具有常规样式,因为它是一种基本字体。尝试使用FontStyle.BoldFontStyle.Italic。您可能必须从 Windows CD 中获取字体。您可以通过转到记事本检查它是否存在,然后转到格式...>字体。选择 Arial,我打赌 Regular 不会被列出。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您抽出宝贵时间回答我的问题。
    【解决方案3】:

    您需要创建一个新字体

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

    【讨论】:

    • 感谢您抽出宝贵时间回答我的问题。
    【解决方案4】:

    我注意到没有真正的完整代码答案,所以当我遇到这个时,我创建了一个函数,它确实改变了字体,可以轻松修改。我已经在

    - 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;
    }
    

    提示:将 Form 替换为 Label、RichTextBox、TextBox 或任何其他使用字体更改其字体的相关控件。通过使用上述函数,从而使其完全动态化。

        /// 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);
    

    简单。

    【讨论】:

      【解决方案5】:
      this.lblMessage.Font = new Font("arial", this.lblName.Font.Size);

      【讨论】:

      • 请编辑您的答案,并添加关于您的代码如何解决问题的说明
      猜你喜欢
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多