如何从另一种形式调用多个方法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#的主要内容,如果未能解决你的问题,请参考以下文章