想象一下,你有FormA和FormB。 FormA有一个ListBox1,它显示DataSource1的值(可能是列表或数组,但底线是它使用ListBox.DataSource赋值)。 FormB将被实例化并调用FormA。 FormA将修改(将单个行添加到列表或数组,当时为1行)DataSource1,它在FormA中提供ListBox1。你如何要求FormA及其ListBox1重新加载DataSource1并显示由FormB修改的新值?目前,FormA将包含源(列表或数组)的整个对象传递给FormB的构造函数中的FormB。我可以在FormB的构造函数中传递FormA引用并以这种方式调用FormA的方法,但这是最有效的方法吗?
答案 0 :(得分:2)
我认为您需要observer Pattern
tutorial
如果您是第一次使用Observer,则应该查看整个MVC Pattern
答案 1 :(得分:0)
事实证明,我错了。事件处理就是答案。 FormA应该有一个方法将数据源重新加载到ListBox1中。应该有另一种可以委托的方法,它将对象作为发送者,将EventArgs作为e。在formB实例化中,适当的FormB的事件处理程序应该像发送者和事件参数一样接收,就像添加任何委托一样。在这种情况下,我可以使用FormClosedEventHandler。或者,可以将该方法委托给DataSource1.DataSourceChangedEventHandler。就是这样!当事件被触发时,FormA作为观察者运行并通过委托执行自己的方法。