【问题标题】:How can I change the font size of all the screens in a windows forms application如何更改 Windows 窗体应用程序中所有屏幕的字体大小
【发布时间】:2015-07-23 18:35:32
【问题描述】:

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

有没有办法在 C# windows 窗体应用程序中做到这一点?

【问题讨论】:

  • 您可以让所有具有文本的控件侦听在更改字体大小时触发的事件。当事件触发时,每个控件都会将其字体大小更新为新值。

标签: c# winforms


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如何使用资源文件来做到这一点?
    【解决方案3】:

    您可以为所有屏幕创建 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 });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 2012-05-11
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多