2014-02-21 35 views
0

我有一個容器WinForm,這個容器被稱爲frmMain,它包含另一個表單,如frmOrder,frmMessage,子表單被添加到TabPage控件中。如何在不同的winforms之間進行通信

我想要做的是子窗體之間進行通信的,說用戶frmOrderfrmMessage需要改變的東西時收到通知,目前我認爲溝通需要通過frmMain進行委託。

一個解決方案,我能想到是讓子窗體從我的自定義Form派生類中定義的接口派生說:

public class MessageEnabledForm: Form 
{ 
    public void SendMessage(String destFormName, String messageType, String data); 
    public void ReceiveMessage(String destFormName, String messageType, String data); 
} 

我不知道這是否是可行的,有沒有其他的解決方案,我可以採用?這是通用的,不需要知道具體的子表單。

回答

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()實現(將其轉換爲通信接口後)。

2

根據你的問題,我不認爲繼承是工作的最佳工具。我說它不是最好的選擇,因爲你沒有處理「是」的關係。我認爲你應該考慮使用事件和委託來處理表單和子表單之間的通信。以下MSDN文章提供了Handling and Raising Events的良好概述。如果您在子窗體中使用數據綁定,您也可以在.NET INotifyPropertyChanged Interface上刷新自己。

相關問題