2013-10-23 147 views
0

我正在使用Winforms客戶端服務器應用程序,該應用程序將加載用於輸入數據或檢索數據或搜索數據的多種表單之一。我想在屏幕的左側放置按鈕,選擇右側加載哪種形式,以及頂部用於常見的新建,打開,刪除等按鈕。Winforms設計建議

我開始通過製作MDI表單將彈出一個子窗口,允許用戶選擇他們想要使用的應用程序。然後,當他們選擇它時,它會在右側加載適當的表單並更新左側按鈕的文本和功能。我正在使用面板將表單加載到按鈕窗體(我稱之爲導航器)和應用程序窗體中。當右側的表單發生變化時,我不得不使用事件來更改不同的按鈕表單。我的一位朋友說我可能以錯誤的方式來解決這個問題。他說,可能有更好的設計模式或方法或控制已經爲我做。

我不知道如何在網絡上搜索這樣的東西。

有人能給我這個方向嗎? 如果我指出正確的方向,我可以進行研究。 也許有一個控件已經做到了這一切? 謝謝。

+0

我最終在splitpanel的右側使用了一個帶有流程面板的垂直分隔面板,所以如果用戶調整窗口大小,控件會自動定位。有一個MDI選擇屏幕可以選擇整個應用程序,並且splitpanel是針對該應用程序的。 – SDanks

回答

0

我們使用類似的模式。 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不會導致我們橫向導航。

+0

我恭敬地不同意你在這裏所說的一切。 'C#'比VB.Net簡潔得多,它的語法更具可讀性。 WPF並沒有增加任何「額外的複雜性」,它通過允許DataBinding而不是可怕的蹩腳的太多代碼爲任何事情的Winforms代碼的方式來簡化開發過程。 WPF視圖大多數情況下根本沒有代碼,它們直接綁定到業務對象或ViewModel以提供表示邏輯。 –

+0

我恭敬地同意你在這裏評論的大部分內容。在我的現實世界裏,這不會改變一件事。我不能折騰近100個表格和數以千計的代碼行,以追逐最新的MS工具。我在WPF + EF中創建了一些較小的支持應用程序(使用VB.Net,對不起),並且它對於簡單的數據庫工作得很好。順便說一下,你說C#更具可讀性,從而損害了你的可信度。簡潔,也許如果你是構建工具。至於OP,很大程度上取決於他們已經在使用什麼,他們在哪裏以及規模。我剛剛發佈了我們所做的並描述了環境。 – rheitzman

+0

沒關係,如果你不想拋棄現有的工作,但是WPF「增加了更多的複雜性」完全是不真實的。另外,如果你客觀[比較C#和VB.Net](http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET),你會很快意識到VB.Net意味着「更多文本」,因爲它缺少並且引入了'End ...'語法(例如'End If','End For')等。另外,VB.Net lambda表達式語法真的很複雜,相反,到C#的簡單'()=>'或'x => x ...' –

0

我認爲用於選擇表單的左側工具欄是一個很好的模式,但可以摺疊(隱藏),以便用戶可以使用所有桌面空間。

至於MDI個人我不喜歡它,因爲跌倒了一點過時和混亂。但是再次尋求形式和功能的平衡。

對於頂部的工具欄,我將它作爲每個窗體的一部分,這樣可以很容易地對邏輯進行編程。這是一種不需要的複雜功能,將它們放在主表單上。

作爲一個推薦,你可以看看,Designing Web Interfaces即使它更專注於網絡可以給用戶交互中的一些指針。

更多信息搜索UI模式用戶交互設計