c# - 如何从另一个窗体调用多个方法 C#

标签 c# forms winforms visual-studio

我有多个表单,它们使用称为“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/

相关文章:

c# - 在 WPF 中应用条件样式

C# - 事件问题

c# - 作为成员重写 PictureBox 的 OnMouseClick

c# - 从数据库中选择数据,使用今天的日期作为标准

c# - 如何在一次又一次地创建我的对象时只创建一次我的静态列表

c# - 将锯齿状数组的值克隆到第二个数组中的极快方法?

c# - 使用 sp_executesql 运行时相同的 SQL 查询很快,如果在查询分析器中作为动态查询执行则非常慢,为什么?

javascript - 如何使用 oninput 转换数字输入,使前两个数字变为小数

javascript - 无法设置表单的隐藏字段

c# - 为什么我的图标没有出现在标题栏中?