C# 如何更改windows窗体应用程序中所有屏幕的字体大小
我有一个用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窗体应用程序中有什么方法可以做到这一点吗?您可以创建一个事件,在更改采用新值的字体大小时触发该事件
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 });