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

C# 如何更改windows窗体应用程序中所有屏幕的字体大小,c#,winforms,C#,Winforms,我有一个用C#编写的windows窗体应用程序。我想让用户能够更改所有屏幕的字体大小 在C#windows窗体应用程序中有什么方法可以做到这一点吗?您可以创建一个事件,在更改采用新值的字体大小时触发该事件 public delegate void FontSize(int size); public event FontSize OnFontSizeChanged; public void WhereYouChangeFontSize() { // Change font size O

我有一个用C#编写的windows窗体应用程序。我想让用户能够更改所有屏幕的字体大小


在C#windows窗体应用程序中有什么方法可以做到这一点吗?

您可以创建一个事件,在更改采用新值的字体大小时触发该事件

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

优雅且可接受的方法是使用资源文件。你应该这样调查

您可以为所有屏幕创建基本表单。此基本表单订阅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 });