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

Rav*_*mer 6 c# delegates winforms

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

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

1)没有对代码进行重组(这是遗留代码,所以它作为一个选项不在桌面上),委托代表处理这个问题的最佳方法是什么?如果没有,你还有其他建议吗?

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

Ale*_*x F 4

首先,F 不应该知道任何有关 D 及其刷新函数的信息。将事件添加到 F,必要时引发该事件。如果表单A知道F,则从A订阅该事件。如果不知道,则在G中制作类似的事件,并在A中订阅它。在A事件处理程序中,直接调用Refresh,或者调用B方法,该方法调用D.refresh。

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

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