WinForms:在运行时更改标签的字体样式(下划线)的正确方法是什么?

6

C#: 如何在运行时更改标签的字体样式(下划线)?

目前我了解到,如果您想在标签上运行时更改与字体相关的属性,主要是所有字体属性,您需要使用以下代码:

 lblName.Font = new Font(... etc. etc.

以上内容是否有一种快捷方式,只分配一个新的字体样式,如FontStyle.Underline?

还是说我必须使用“new Font()”方法并将所有字段一起分配才能给我的标签添加下划线?


你可能需要指定你正在使用哪种窗口(Winforms或WPF)。 - Jason Jackson
4个回答

15

您的做法:

this.Font = new Font(this.Font, FontStyle.Underline);

是正确的。原因是字体是一个封闭且不可变的类型(设计上如此)。在.NET 1中引入时,这似乎有点奇怪,但随着当今对函数式编程、并发和不可变性的强调,这种风格越来越常见。也许之所以这样做是因为控件继承其容器的字体,并跟踪单个字体属性更改比跟踪整体字体更改要更费力一些。


2

使用以下代码:

this.Font = new Font(this.Font, FontStyle.Underline);

适用于Win32表单。


这就是我能想到的全部了。我认为那还不错。 - wonderchook

1
//Bold.
    label1.Font = new Font(label1.Font.Name, 12, FontStyle.Bold); 

//Bold With Underline.
    label1.Font = new Font(label1.Font.Name, 12, FontStyle.Bold | FontStyle.Underline); 

//Bold with Underline with Italic.
    label1.Font = new Font(label1.Font.Name, 12, FontStyle.Bold | FontStyle.Underline | FontStyle.Italic); 

0

我使用的是 .Net Framework 2.0。在 Web 应用程序中,这个方法可以正常工作。但在窗体应用程序中,它是只读的。

lblName.Font.Underline = true;

这是定义:

    //
    // Summary:
    //     Gets or sets a value that indicates whether the font is underlined.
    //
    // Returns:
    //     true if the font is underlined; otherwise, false. The default value is false.
    [DefaultValue(false)]
    [NotifyParentProperty(true)]
    public bool Underline { get; set; }

无法正常工作,因为font.underline是只读属性。 - Tim Sullivan
你确定吗?在我发布之前,我尝试过并且它可以工作。你使用的是哪个版本? - wonderchook
抱歉,不好意思。这适用于Web应用程序,而不是Windows应用程序。 - wonderchook

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