我尝试了很多不同的东西,所以显然我现在被卡住了......我创建了一个表单,它上面有一个按钮 - 单击它会创建一个新表单。我可以通过这种方式单击并创建多个表单。我想要并且无法开始工作的是让主表单上有第二个按钮 - 单击该按钮将更改辅助表单上的所有背景颜色。
谢谢 - 我猜我关闭了,但话又说回来 - 关闭不起作用......
有几种方法可以实现这一点,但一种方法是在主窗体中保留所有子窗体的集合,并change background color
在每个窗体上调用自定义方法。您可以创建一个 ChildFormBase 类,它们都可以继承,您可以在其中定义方法以避免在所有子表单中重复它。
您也可以使用您在 MainForm 中引发的子窗体可以订阅的事件来执行此操作。
基本上你不需要事件或委托类型的东西来解决这个问题。在您的辅助表单中编写一个公共方法来更改背景颜色。保留二级表单列表,单击按钮时,只需遍历所有二级表单并调用颜色更改方法
使用事件
在你的父表单中做这样的事情。
private event Action<Color> ChangeColor;
private void CreateAndShowForm()
{
var form2 = new Form2();
ChangeColor += form2.changeColor;
/*do other stuff to show form*/
}
private void button1_Click(object sender, EventArgs e)
{
ChangeColor(Color.Red);
}
在子窗体中
public void changeColor(Color obj)
{
/*change background color*/
}
在 .NET 中,当一个事件引发时,所有监听它的对象(注册为事件侦听器)都会收到该事件已引发的通知并执行相应的事件处理程序。因此,在您的情况下,每个子表单都应注册到主表单的特定事件,作为事件侦听器。每次主窗体引发事件时,都会通知子窗体该事件已被引发并采取相应的行动。
您可以将其视为 C# 中事件范例的指南。
希望我有所帮助!