如何更改Windows窗体应用程序中所有屏幕的字体大小

时间:2015-07-23 10:06:08

标签: c# winforms

我在C#中有一个Windows窗体应用程序。我想为用户提供更改所有屏幕字体大小的功能。

有没有办法在C#windows窗体应用程序中执行此操作?

3 个答案:

答案 0 :(得分:2)

您可以创建一个事件,只要您更改采用新值

的字体大小,就会触发该事件
public delegate void FontSize(int size);
public event FontSize OnFontSizeChanged;

public void WhereYouChangeFontSize()
{
  // Change font size
  OnFontSizeChanged(newFontSize)
}

然后在所有屏幕中连接到它

SomeClass.OnFontSizeChanged += FontSizeChanged;

private void FontSizeChanged(int newValue)
{
  controls.FontSize = newValue;
}

答案 1 :(得分:0)

优雅且可接受的方法是使用资源文件。你应该以这种方式进行调查。

答案 2 :(得分:0)

您可以为所有屏幕创建BaseForm。此BaseForm订阅ChangeFontMessage。对于消息传递,您可以使用任何EventAggregator库。此示例使用MVVM Light Messenger。

public class BaseForm : Form
    {
        public BaseForm()
        {
            Messenger.Default.Register<ChangeFontMessage>(this, message =>
            {
                SetFont(message.FontSize);
            });
        }

        private void SetFont(float fontSize)
        {
            Font = new Font(Font.FontFamily, fontSize);

            //If you need to change font size of child controls
            foreach (var control in Controls.OfType<Control>())
            {
                control.Font = new Font(control.Font.FontFamily, fontSize);
            }
        }
    }

    public class ChangeFontMessage
    {
        public float FontSize { get; set; }
    }

然后你可以在任何地方提出这个消息:

Messenger.Default.Send(new ChangeFontMessage { FontSize = 20 });