我有多个表单,它们使用称为“UpdateTheme”的相同方法,该方法会更改表单的背景颜色。我希望能够从另一种形式调用所有这些方法。
我尝试使用“UpdateTheme”方法创建一个基本表单,然后让所有其他表单继承自该基本表单,但我不知道如何/是否有可能从一个单独的表单调用派生表单方法的每个实例“设置”表单。
public abstract class CustomForm : Form
{
public void UpdateTheme(string theme)
{
if (theme == "dark")
{
this.BackColor = Color.Black;
}
else if (theme == "light")
{
this.BackColor = Color.White;
}
}
}
在设置表单中我会有类似的东西
public void btnSetThemeToDark_Click(object sender, EventArgs e)
{
foreach (instance of derived form)
{
derivedForm.UpdateTheme("dark");
}
}
最好的方法是什么?
最佳答案
您可以创建一个名为 StyleManager 的单例,其中包含全局样式属性。这个单例有一个称为样式更改的事件,可以由所有表单或基本表单处理。因此,您的所有表单都从一个来源获取信息。
样式管理器
public class StyleManager
{
#region singleton
public static StyleManager Instance { get; } = new StyleManager();
private StyleManager()
{
}
#endregion
#region events
public event EventHandler StyleChanged;
private void OnStyleChanged()
{
this.StyleChanged?.Invoke(this, EventArgs.Empty);
}
#endregion
#region properties
public Color BackColor { get; set; }
#endregion
#region methods
public void UpdateBackColor(Color color)
{
this.BackColor = color;
this.OnStyleChanged();
}
#endregion
}
并像这样在您的表单中使用它:
public Form()
{
this.InitializeComponent();
//Attach to the event
StyleManager.Instance.StyleChanged += this.StyleChanged;
}
//Handle event
private void StyleChanged(object sender, EventArgs eventArgs)
{
this.BackColor = StyleManager.Instance.BackColor;
}
//set backcolor of all forms
StyleManager.Instance.UpdateBackColor(Color.Yellow);
关于c# - 如何从另一个窗体调用多个方法 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48476960/