2012-04-25 236 views
2

我有一個窗體窗體應用程序與列表樣式窗體與父記錄和許多相關的任何選定的父記錄相關的子記錄。Windows窗體C#

即。具有多個發票/報價/通信等的客戶等等

我的表單佈局有一個父記錄列表,當用戶選擇父記錄時,表單上的其他列表將填充相關的子信息。所有這些列表用戶可以打開任何記錄的詳細信息表單。例如,用戶可以選擇客戶1,然後選擇詳細信息,客戶詳細信息表格將打開並顯示客戶1的信息。用戶可以返回併爲客戶選擇相關記錄1讓我們說發票1,然後打開顯示發票1信息的發票明細表。

所以在任何時候用戶可能會有幾個發票/報價/對應等等等等細節表格打開。用戶也可以選擇另一個客戶並通過打開詳細表單的相同過程。

我遇到的問題是,當選擇客戶1並且用戶想要顯示詳細信息表單時,我需要檢查所有打開的表單以查看客戶1詳細信息表單是否已打開。

我想知道什麼被認爲是在這suituation良好的做法。

我試圖找到一些通用的方法,我可以以某種方式適用於所有形式。

+0

除了我原來的問題和更復雜的事情,當這些細節表單被打開時,它們也可能包含一個列表,並且這個列表可以產生某種類型的更多細節形式。我想這是一個相關形式的樹。我遇到的主要問題是,如果我在表單樹的某處刪除父信息,則需要查看所有打開的表單,查找相關的詳細表單並相應地關閉它們。我看到它有一個Id和parentId的表,我想刪除與特定Id相關的所有子記錄....希望這是有道理的。 - – trailerman 2012-04-26 05:05:08

回答

0

您可以做的是製作左側客戶列表,並在右側列出客戶信息面板。點擊客戶將使用新的客戶信息更新面板。

(想想探險家的窗戶是如何工作的。在左側的文件夾,在右邊的所選文件夾的信息)

該小組將舉行的客戶信息,如名稱和發票清單等點擊在發票上將以新的形式打開發票。客戶的細節不需要以新的形式打開。

+0

除了我原來的問題,當這些細節表單被打開時,它們可能更多地包含一個列表,這個列表可以產生某種類型的更多細節形式。我想這是一個相關形式的樹。我遇到的主要問題是,如果我在表單樹的某處刪除父信息,則需要查看所有打開的表單,查找相關的詳細表單並相應地關閉它們。我看到它有一個Id和parentId的表,我想刪除與特定Id相關的所有子記錄....希望這是有道理的。 – trailerman 2012-04-26 04:16:25

0

一種方法是將表單實例存儲在一個列表中,並在打開一個新表單之前試圖找到相應的實例(如果您有一些其他所有其他繼承的「基礎表單」,其中有一個屬性爲客戶編號)。

您需要確保在表單關閉時刪除列表項。

如果你願意,我可以在這裏提供僞代碼。

0

正如我猜測的那樣,您需要多次打開相同的表單,但不需要兩次顯示相同的客戶信息。如果是這樣,那麼一種選擇是在客戶詳細信息表單中創建靜態客戶列表(例如客戶Id列表)並檢查新實例。如果客戶存在於靜態列表中,則可以取消顯示或聚焦已打開的詳細信息表格(當然,如果您保存表格句柄)。

1

您可以在某處存儲IDictionary<Customer, Form>。這將使你做一個簡單的O(1)查找:

var dict = new Dictionary<Customer, Form>(); 
var cust = new Customer(); 

if(!dict.ContainsKey(cust) || dict[cust].IsDisposed) 
{ 
    dict[cust] = new Form1(); 
} 

dict[cust].Show(); 
dict[cust].Activate(); 

該樣品被縮短了一點:dict當然會不會是本地的,也不會是cust。他們將是一個實例字段和一個參數。

0

其他選項也許是使用MDI表格。作爲主要MDI表格的孩子打開你的所有表格。在打開新表單時,您可以隨時檢查它是否已經存在。

閱讀this文章的詳細信息。

希望這會有所幫助。

優點:無需維護已打開實例的單獨列表。