我尝试了很多不同的东西,所以很明显我现在卡住了...我创建了一个表单,它上面有一个按钮 - 点击后创建一个新表单。我可以点击此处并以这种方式创建多个表单。我想要和不能工作的是让主窗体上有第二个按钮 - 点击它会改变次要窗体上的所有背景颜色。
谢谢 - 我猜我已经关闭了,但是又一次 - 关闭不起作用......
答案 0 :(得分:0)
有几种方法可以实现这一点,但一种方法是在主窗体中保留所有子窗体的集合,并在每种窗体上调用自定义change background color
方法。您可以创建一个ChildFormBase类,它们都可以从您可以继承的位置继承,以避免在所有子窗体中重复它。
您也可以使用您在MainForm中引发的子表单可以订阅的事件来执行此操作。
答案 1 :(得分:0)
基本上,您不需要事件或委托类型的东西来解决此问题。在辅助表单中编写一个公共方法来更改背景颜色。保留辅助表单列表,单击按钮时,只需遍历所有辅助表单并调用颜色更改方法
使用活动
在您的父表单中执行类似的操作。
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*/
}
答案 2 :(得分:0)
在.NET中,当引发事件时,会通知所有侦听它的对象(注册为事件侦听器)已引发该事件并执行相应的事件处理程序。因此,在您的情况下,每个子表单应作为事件侦听器注册到主表单的特定事件。每当主要表单引发该事件时,子表单将被通知该事件已被引发并采取相应行动。
您可以看到this作为C#中事件范例的指南。
希望我帮忙!