如何在课程之间设置代理?

时间:2010-07-14 13:27:19

标签: c# winforms delegates

我正在使用一些结构化的代码:

表单A中包含用户控件B和G.用户控件B在其中具有用户控件D,并且用户控件D具有“刷新”方法。用户控制G在其中具有用户控制F,并且用户控制F需要在D中调用“刷新”方法。

1)没有重组代码(它的遗留代码,因此它作为一个选项不在桌面上),代表是处理这个问题的最佳方式吗?如果没有,你还有其他建议吗?

2)我没有代理功能的经验 - 是否有一个很好的入门或示例可以用来适应我的代码以实现所需的功能?

2 个答案:

答案 0 :(得分:4)

首先,F对D及其刷新功能一无所知。将事件添加到F,必要时将其引发。如果表单A知道F,则从A子事件到此事件。如果不是,则在G中创建类似事件,并在A中订阅它。在事件处理程序中,直接调用Refresh,或调用调用D.refresh的B方法。

看起来我的答案比你的问题更难阅读:)它应该是这样的:

F引发事件 - > G处理F事件并引发事件 - > A处理G的事件并调用B方法 - > B方法调用D.refresh

答案 1 :(得分:0)

对于代表们,请看:http://www.akadia.com/services/dotnet_delegates_and_events.html

对于活动,你必须确保东西以正确的顺序通过。 在当前场景中,我猜测一个好方法是从G中暴露一个事件,当F中的某些事情发生变化时,该事件应该被触发。我们将在B中订阅一个处理此事件的处理程序,最终将调用refresh。 将有更多的事件和代表参与将呼叫从父母传递给孩子,反之亦然。 请记住机械装置的概念:运动的一部分是触发(引发事件)给他人的运动。当其他人移动时,他们会触发其他相关部件......最终会有一些远处移动。 希望它有所帮助。