为多个表单创建事件

时间:2013-11-14 06:44:23

标签: c# .net events delegates

我尝试了很多不同的东西,所以很明显我现在卡住了...我创建了一个表单,它上面有一个按钮 - 点击后创建一个新表单。我可以点击此处并以这种方式创建多个表单。我想要和不能工作的是让主窗体上有第二个按钮 - 点击它会改变次要窗体上的所有背景颜色。

谢谢 - 我猜我已经关闭了,但是又一次 - 关闭不起作用......

3 个答案:

答案 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#中事件范例的指南。

希望我帮忙!

相关问题