我們使用類似的模式。 MDI父對象和任務的菜單。每個對象/任務的MDI子表單(約30個)。 N:N:X(其他複雜的關係或任務)1:1(調用l個相關對象),1:N(相關對象的顯示列表 - 檢查,設備等) 。正文有一個選項卡控件來分組數據。至少有一個選項卡是1:N列表重複使用的datagridview。
左側導航按鈕集取決於所管理的對象。我們動態地添加按鈕,但在大多數情況下,它們都是硬編碼的 - 我們只是不使用工具箱將按鈕放在子窗體上。每個按鈕組都在面板中 - 如果我要重新開始,我可能會使用FlowPanel。
我們在一個更復雜的對象上構建了一個「模型」形式,構建了所有數據綁定邏輯,然後將該形式用作其他對象的基礎。我們沒有使用Visual Studio/VB.Net提供的繼承。
我們做我們自己的控制數據「綁定」。我們使用ADO.Net和SQL Server。我們的子表單只顯示一條記錄,不支持嚮導生成的表單中顯示的典型記錄導航 - 在我們橫向瀏覽數據的情況下,這種情況很好。例如申請,授權建設,許可 - 然後檢查,續展等與一個設施有關。(我們是一個監管機構)
我們使用VB.Net作爲很多業務邏輯是在VB6中開發的。我今天仍然使用VB.Net與C# - 更容易用於業務邏輯和更易維護的IMO。
需要考慮的一個問題 - 有些人對WinForms(和VB.Net)有很長的期盼。我看不到微軟貶低WinForms,但也有人提倡這一點。許多人無法理解WinForms的簡單性(雖然有限的靈活性),它使我們能夠專注於正在完成的業務。我一直在看WPF,但根本無法看到它提供的所有UI功能的用處。 WPF支持者將推動MVVM,但這只是小規模開發或生產所不需要的更復雜的(20臺桌面或局域網用戶)環境。 WPF不會導致我們橫向導航。
我最終在splitpanel的右側使用了一個帶有流程面板的垂直分隔面板,所以如果用戶調整窗口大小,控件會自動定位。有一個MDI選擇屏幕可以選擇整個應用程序,並且splitpanel是針對該應用程序的。 – SDanks