0

我尝试了很多不同的东西,所以显然我现在被卡住了......我创建了一个表单,它上面有一个按钮 - 单击它会创建一个新表单。我可以通过这种方式单击并创建多个表单。我想要并且无法开始工作的是让主表单上有第二个按钮 - 单击该按钮将更改辅助表单上的所有背景颜色。

谢谢 - 我猜我关闭了,但话又说回来 - 关闭不起作用......

4

3 回答 3

0

有几种方法可以实现这一点,但一种方法是在主窗体中保留所有子窗体的集合,并change background color在每个窗体上调用自定义方法。您可以创建一个 ChildFormBase 类,它们都可以继承,您可以在其中定义方法以避免在所有子表单中重复它。

您也可以使用您在 MainForm 中引发的子窗体可以订阅的事件来执行此操作。

于 2013-11-14T06:48:12.370 回答
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*/
}
于 2013-11-14T06:48:28.903 回答
0

在 .NET 中,当一个事件引发时,所有监听它的对象(注册为事件侦听器)都会收到该事件已引发的通知并执行相应的事件处理程序。因此,在您的情况下,每个子表单都应注册到主表单的特定事件,作为事件侦听器。每次主窗体引发事件时,都会通知子窗体该事件已被引发并采取相应的行动。

您可以将视为 C# 中事件范例的指南。

希望我有所帮助!

于 2013-11-14T07:13:01.153 回答