如何通知子控件父级更改

时间:2010-04-21 17:35:38

标签: c#

让孩子控制更新父母的最新方法是什么。

我在父对象中托管了许多子控件,我可以想到两种向其发送更改信息的方法。

1)将子控件连接到父级中的事件,并在父级的更改中触发该事件

2)在数组中保留子项列表,并在发生更改时遍历数组,并在子项中调用方法来处理新更改。

我希望我把它描述好。

两者都有效,但可能有正确的方法来处理这个错误的方法。

编辑: 下面是我的代码...用于事件方法。我对如何将孩子与父母联系起来感到不满意;任何sugestions。

父母......

public  class A_Parent       
{

 public delegate void DelUpdateMessage(  string msg );

public event DelUpdateMessage UpdateMessage;
public A_Parent()
{
  a_Child1.prnt = this;
  a_Child2.prnt = this;
  a_Child3.prnt = this;
  a_Child4.prnt = this;
}

private void FireUpdateMessageEvent(  string message)
{
  var handlers = UpdateMessage;

  if (handlers != null)
    handlers(  message );

}
  }

孩子......

public  class A_Child        
    {
    A_Parent pnt;
    public A_Parent prnt
    {
     set
       {
        pnt = value;
        pnt.UpdateMessage += new A_Parent.DelUpdateMessage(pnt_UpdateMessage);
        }
     }


void pnt_UpdateMessage(string msg)  {      }

}

3 个答案:

答案 0 :(得分:5)

您的#1解决方案是最好的选择,因为它允许您在不更改父级的情况下更改您的实现。由于父母可能不关心它是否有孩子,因此基于事件的方法是理想的。

<强>更新

反向事件方法是不诚实的。人们说父母清楚地知道孩子们对他们感兴趣,我只是倾向于不同意这种说法。我的设计通常会让孩子们对父母产生动态的兴趣,订阅这些事件的孩子通常是最有利的方式。

您可以在.NET模型中找到这样的示例,例如包含可以绑定的事件的页面。

答案 1 :(得分:2)

事件不是这里的正确选择。父母从来没有问题确定需要通知哪些儿童控制。只需向UC添加公共方法,如UpdateMessage()。家长可以直接打电话给他们。

保留事件,以便在您不知道哪些侦听器可能感兴趣时能够通知侦听器。像你正在考虑的“反向事件”是不健康的,它在表格上有参考。永远不应该引用表单,以便在关闭时可以收集垃圾。这不是一个真正的问题,因为引用由子控件保存,但原则成立。

答案 2 :(得分:0)

事件机制是此类任务的常见例程。它比第二种解决方案更灵活。