我有一个名为WinForm
的容器frmMain
,其中包含frmOrder
,frmMessage
等其他表单,子表单已添加到TabPage
控件中。
我想要做的是在子表单之间进行通信,比如用户更改frmOrder
和frmMessage
中的某些内容需要通知,目前我认为通信需要通过frmMain
进行委派
我能想到的一个解决方案是从我的自定义Form
派生类派生子类,定义接口说:
public class MessageEnabledForm: Form
{
public void SendMessage(String destFormName, String messageType, String data);
public void ReceiveMessage(String destFormName, String messageType, String data);
}
我不知道这是否可行,我可以采用其他解决方案吗?这是通用的,不需要知道具体的子表单。
答案 0 :(得分:2)
根据您的问题,我不认为继承是这项工作的最佳工具。我说这不是最好的选择,因为你没有处理“是一种”关系。我认为您应该考虑使用事件和代理来处理表单和子表单之间的通信。以下MSDN文章提供了Handling and Raising Events的完整概述。如果在子表单中使用数据绑定,您也可能希望在.NET INotifyPropertyChanged Interface上刷新自己。
答案 1 :(得分:1)
你可以像这样使用接口,所有子表单都可以实现:
public interface Communication
{
public delegate void SendMessageDelegate(String destFormName, String messageType, String data);
public event SendMessageDelegate SendMessage;
public void ReceiveMessage(String destFormName, String messageType, String data);
}
当主窗体接收到该事件时,它可以迭代其“子”窗体,在destFormName
上寻找匹配,然后调用其ReceiveMessage()实现(在将其转换为Communication接口之后)。