C# 将要通过多个表单传递回父级的自定义事件链接起来

C# 将要通过多个表单传递回父级的自定义事件链接起来,c#,winforms,events,C#,Winforms,Events,我有一个MDImain(Form1),用于处理子级生成的自定义事件。当我创建子窗体的实例时,我将子事件附加到父处理程序。所有作品都很棒,父母捕捉到了孩子产生的事件。父级中的代码如下所示 ChildForm instanceChildForm = new ChildForm(); instanceChildForm.Feedback += new EventHandler<feedback>(MainMessageHandler); ChildForm instanceChildFo

我有一个MDImain(Form1),用于处理子级生成的自定义事件。当我创建子窗体的实例时,我将子事件附加到父处理程序。所有作品都很棒,父母捕捉到了孩子产生的事件。父级中的代码如下所示

ChildForm instanceChildForm = new ChildForm();
instanceChildForm.Feedback += new EventHandler<feedback>(MainMessageHandler);
ChildForm instanceChildForm=new ChildForm();
instanceChildForm.Feedback+=新的EventHandler(MainMessageHandler);
然后我显示子窗体。。。(主消息处理程序采用父窗体)

现在我想让我的子窗体显示第三个窗体,称之为child2。它是从childForm实例化的,但我希望父MDI仍能捕获此事件。如何将通风口返回到mdi父级

我所能想到的就是在主窗体上公开MainMessageHandler例程,但是我仍然需要对主窗体的引用。。。child3.parent=child2parent然后像这样附加事件:

ChildForm2 instanceChildForm2 = new ChildForm2();
instanceChildForm2.Feedback += new EventHandler<feedback>(this.parent.MainMessageHandler);
ChildForm2 instanceChildForm2=new ChildForm2();
instanceChildForm2.Feedback+=新的EventHandler(this.parent.MainMessageHandler);
或者类似的

或者这对代理之类的事情是一个很好的用途?如果是这样的话,我不知道该怎么办


谢谢你的帮助

有无数种方法可以做到这一点。在我看来,在任何Windows应用程序中,您都需要了解所有表单及其状态,并且能够在不创建依赖项的情况下在它们之间传递消息。比如:

public class FormManager
{
    List<Form> _forms = new List<Form>();

    public void CreateForm<T>() where T : Form, new()
    {
        var form = new T();
        _forms.Add(form);
        AttachEvents(form);
        form.Show();
    }

    ...methods for attaching events, responding to them, and DETACHING on form.Closed
}
公共类表单管理器
{
列表_forms=新列表();
public void CreateForm(),其中T:Form,new()
{
var form=newt();
_表格。添加(表格);
附件(表格);
form.Show();
}
…用于在窗体上附加事件、响应事件和分离事件的方法。已关闭
}
使用
FormManager.CreateForm(),而不是
new()
ing up forms


现在,当其中一个窗体引发事件时,您可以访问所有窗体,包括父窗体和子窗体,并且可以决定如何处理该事件。如果希望FormManager智能化,您可以在FormManager中做出这些决定,也可以将其下推到表单本身。

如果使用构造函数将值传递给表单,这看起来可能会变得复杂。您还可以添加一个接受预构造表单的Register方法。要点是一样的——如果你有一个表单的中央存储库,你可以附加事件并做出决定。我有一个自定义基窗体,所有其他窗体都从该窗体继承。我可以在加载表单后注册它,然后连接任何其他事件。谢谢你的想法。