天天看點

在Winform界面中實作對多文檔窗體的參數傳值

在Winform界面中窗體我們一般使用多文檔進行展示,也就是類似一般的頁籤的方式可以加載多個窗體界面。一般來說,我們如果打開新的窗體,給窗體傳遞參數是很容易的事情,但是在架構層面,一般的窗體是通過動态建立的,一般傳入窗體的類型,在多文檔集合裡面判斷,如果存在則激活,如果不存在則建立的方式,是以我們傳遞參數會碰到一些問題。本文即使介紹如何在這種方式下,給窗體對象傳遞參數,進而實作相應的資料處理功能。

不管是主體界面中,左側包含樹形清單,還是頂部包含工具欄的情況,都可能涉及打開窗體的時候,傳遞一些初始化參數,友善窗體的更新顯示的情況,這種的處理相對直接傳值的方式需要複雜一點,我們可以通過接口、事件的方式進行處理,下面我來介紹一下整個實作的方式。

在我的Winform開發架構裡面,我們加載多文檔窗體的時候,都是統一采用一種方式來進行建構不存在或者激活已有窗體的,代碼如下所示。

而這個LoadMdiForm的函數,主要判斷多文檔集合裡面是否有對應的對象,沒有這建立,有則激活顯示即可,代碼如下所示。

這種方式建構的多文檔界面如下所示。

在Winform界面中實作對多文檔窗體的參數傳值

首先,為了實作這個方式,我們需要先建立一個接口,是我們窗體界面的基類,實作這個接口,然後在加載的時候,轉換為對應的接口處理就可以了,具體接口代碼如下所示。

這裡參數為了通用,我們定義為字元串的JSON内容,友善實作更加強大的參數處理。

修改好這些,我們需要在基類窗體 BaseForm 實作這個增加的接口,如下所示。

實作這個接口很容易,為了更加友善業務窗體(繼承自基類窗體BaseForm),我們提供一個事件進行處理,具體代碼如下所示。

同時,我們實作接口,就是直接調用事件就可以了,具體代碼如下所示。

這樣我們就完成了基類窗體的處理了,前面我們介紹了動态建構加載窗體的時候,是使用了LoadMdiForm的函數,既然我們的接口實作了上面的ILoadFormActived接口,那麼我們動态建立或者激活窗體的時候,那麼就使用這個接口進行處理一下,以便實作對應事件的處理操作了。是以我們的窗體加載函數修改代碼,如下所示。

還記得我們前面打開一個多文檔窗體的代碼,就是利用這個接口進行建立或者激活指定類型的窗體的,如下所示。

那麼我們增加了新的函數參數Json後,我們如果需要傳遞一個指定的參數給對應的窗體,那麼就修改下調用即可。例如下面,為了測試,我傳入一個動态建構的類資訊,然後轉換為Json字元串資訊給接收窗體,并進行加載窗體。

前面我們介紹了基類窗體,已經實作定義了一個事件,并對這些通知的接口進行處理,具體如下所示。

在Winform界面中實作對多文檔窗體的參數傳值

那麼我們前面加載的 FrmItemDetail  需要做哪些工作呢,就是實作對事件的處理即可,如下所示。

在Winform界面中實作對多文檔窗體的參數傳值

這樣我們就能夠通過實作對應的事件,把整個通知事件的處理處理完畢了,我們來看看最終的界面效果,如下所示,接收到的窗體事件後,會彈出一個提示對話框在右下角了。

在Winform界面中實作對多文檔窗體的參數傳值

當然實際上我們可以做的更多,如可以傳遞一些具體的資訊,讓它在界面上進行顯示。

如其中一個客戶基于我的Winform開發架構基礎上進行的參數傳遞案例界面如下所示。

在Winform界面中實作對多文檔窗體的參數傳值

本文隻是對其中在架構層面對不同多文檔窗體的傳值進行的一個研究探索和實作,其中的理念是基于常用的接口和事件驅動的方式進行處理,以期達到友善、高效的目的,如果您有更好的建議,也希望多多交流。