c# - Winform自定义控件如何通知另一个Winform自定义控件?

标签 c# winforms

假设在自定义控件中我定义了一些自定义事件 myEvent。现在,当引发事件时,该事件将被父表单捕获。

如何在同一父窗体上的另一个自定义控件中捕获此事件?我希望其他控件以某种方式订阅第一个控件事件。

最佳答案

我在处理 MVC 时经常遇到类似的情况。我喜欢处理它的方式是在 Controller 中使用中介设计模式。

基本上,您有一个具有注册函数和通知函数的类。 register 函数采用一个实现监听器接口(interface)和 messageId 的对象。它将这些存储在字典中。通知函数采用需要发送给监听器的事件的 messageId,并通知相应的监听器事件已发生。

也许是这样的事情

public interface IListener
{
void MessageRaised(int messageId, params object[] arguments);
}

public class Mediator
{
public void Register(IListener listener, int messageId)
{
//... add to dictionary of arrays for each messageId
}

public void NotifyListeners(int messageId, params object[] arguments)
{
//... loop through listeners for the messageId and call the MessageRaised function for each one
}
}

现在通常我有一个基本 Controller ,它实现了一个静态中介对象。然后我的所有其他 Controller 都继承自它。如果您使用后面的代码并且无法继承,那么您可以尝试使用单例模式。 .Net 静态类也非常棒,因为它们有一个构造函数,因此您也可以使用它。

因此,在您的情况下,我会让每个控件背后的代码实现 IListener,然后在每个控件的构造函数中包含类似 Mediator.GetInstance().Register(this, Messages.MyEvent) 的内容。这是一种快速而肮脏的方法,可以在将来进行一些重构,以使其更具可重用性。

通过 Google 快速搜索得到的一些资源

http://www.avajava.com/tutorials/lessons/mediator-pattern.html

http://sourcemaking.com/design_patterns/mediator

祝你好运

关于c# - Winform自定义控件如何通知另一个Winform自定义控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337477/

相关文章:

c# - 使用缩进和 xml :space ="preserve" 保存 XDocument

c# - 计时器永不停止

c# - 获取时间过程需要几秒钟才能完成?

.net - WebBrowser 控件报告什么 UserAgent?

c# - 在ssis脚本组件中添加第三方dll引用

c# - 如何在删除后解锁Sqlite数据库

c# - 在 C# 中格式化日期

c# - 使用 C# 或 F# 查找包括单个字符的字符串排列

.net - 我可以将节点文本包装在WinForms TreeView中吗

c# - 在 Windows 窗体应用程序中捕获组合键事件