C#处理动态字体大小的方法

3
有什么好的方法可以动态改变我的应用程序中的字体大小吗?我有许多屏幕和标签。这些标签至少继承自一个共同的标签。另一个问题是我是否应该让标签自适应大小,并只在标签中使用换行符进行分割?我已经将许多标签切换为不自适应大小,因为它们变得宽而不能自动换行。
目前,我已将所有设置为锚定等等,任何按钮等都没问题。现在只需要动态调整字体大小。
谢谢!

1
在我看来,动态更改字体大小并不是一个好主意。我做了很多Winforms编程,我觉得自适应大小、锚定和停靠的概念已经够让你疯狂了,不需要再添加另一个玩家。但也许你有一个很好的理由去做它。如果你想要文本标签换行,可以使用只读的文本框。我发现TableLayoutPanel在对齐自适应大小控件方面非常有用。 - Gert Arnold
2个回答

2

在每个窗体的构造函数中,在InitializeComponent();之前,只需放置this.Font = new Font( ... );,以您所需的方式进行设置。然而,它只会在您将每个控件保留为默认值时进行级联。您始终可以在初始化之后放置循环:

foreach(Control c in this.Controls)
{
    if(c is Label) //if you want to change Labels only
        c.Font = new Font( ... );
}

如果布局出现问题,请更改AutoScaleMode和相关属性。
解决标签文字换行的问题,使用Label1.AutoSize = true,然后简单地设置Label1.MaximumSize = new Size(x, 0);,其中x是您的最大宽度。
话虽如此,如果您经常需要动态缩放内容,则确实应该考虑使用WPF而不是WinForms。它具有更多能够自动处理这些类型任务的能力。

0

你可以将字体大小保存为应用程序设置中的整数。 然后,当你获取字体大小时,你的应用程序将记住它的字体状态。

    Properties.Settings.Default.FontSize = 3;
    Properties.Settings.Default.Save();

然后像上面所说的那样使用foreach循环。

    foreach(Control c in this.Controls)
    {
     c.Font = new Font( .. );
    // if(c is Panel)
    //   {
    //     foreach(Control d in c.Controls)
    //     {
    //     d.Font = new Font( .. );
    //     }
       }
    }

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