簡體   English   中英

如何在Windows Forms應用程序中更改所有屏幕的字體大小

[英]How can I change the font size of all the screens in a windows forms application

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

做到這一點的優雅而可接受的方法是使用資源文件。 您應該以這種方式進行調查。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM