【发布时间】:2015-07-23 18:35:32
【问题描述】:
我有一个 C# 中的 Windows 窗体应用程序。我想为用户提供更改所有屏幕字体大小的便利。
有没有办法在 C# windows 窗体应用程序中做到这一点?
【问题讨论】:
-
您可以让所有具有文本的控件侦听在更改字体大小时触发的事件。当事件触发时,每个控件都会将其字体大小更新为新值。
我有一个 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 });
【讨论】: