如何从另一种形式调用多个方法C#

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从另一种形式调用多个方法C#相关的知识,希望对你有一定的参考价值。

我有多个表单,使用相同的方法称为“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的单例,其中包含全局样式属性。这个单例有一个名为样式更改的事件,可以由所有表单或基本表单处理。因此,您的所有表单都从一个来源获取信息。

的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);
另一答案

假设这个表单是表单的MdiChildren,你可以这样做:

foreach (var form in this.MdiChildren)
{
    var castedForm = form as CustomForm;
    if (myObjRef != null)
    {
         castedForm.UpdateTheme("dark");
    }        


}

此功能超出主题,适用于子表单的任何常用方法。

另一答案

我不认为这是最好的方法。但是,您可以使用此代码存档您想要的内容。

CustomForm mainFrm = (CustomForm)Application.OpenForms["YouCustomFormNameHere"];
mainFrm.UpdateTheme("dark");

将'YouCustomFormNameHere'替换为您的CustomForm表单名称。

以上是关于如何从另一种形式调用多个方法C#的主要内容,如果未能解决你的问题,请参考以下文章

我如何从另一种方法调用 linq?

如何在一种方法中为数组赋值并从另一种方法调用

为啥不能从另一种方法调用main方法[关闭]

我如何以编程方式从另一种方法单击 JavaFX 中的按钮?

从另一个片段调用一个片段中的方法

如何从另一种方法访问 StorageFile