2010-03-19 81 views
7

我通常使用TabControl並以某種方式隱藏標籤並在其中導航。構建嚮導的良好模式?

我很好奇這樣做的其他方式!

+6

索倫使用了一個'RingControl'設備作爲嚮導,但我認爲它有點多。 – FrustratedWithFormsDesigner 2010-03-19 21:04:52

+0

@FrustratedWithFormsDesigner:我在哪裏可以得到這樣的控制? – Luiscencio 2010-03-19 23:00:59

回答

5

您可以使用一組Panel對象,除第一個面板之外的所有對象的Visible屬性設置爲false

存儲當前面板的索引,並具有適當更改該索引的「下一步」和「上一步」按鈕。當此索引更改時,根據需要使適當的面板可見/不可見(只有當前面板應該在給定時間可見)。

您還可以在某些/所有面板上處理IsVisibleChanged事件,以觸發用戶導航到特定面板時發生的某些行爲。

2

這是一個很相關的話題;我在兩年前建立了一個相當全面的Wizard控件,用於在家中使用,我記得花了幾個星期才完成正確的工作。

的基本要素是:

  • 部首面板
  • 內容面板
  • Action面板
  • 邊欄

兩個內容面板和動作面板利用ParentControlDesigner的至啓用刪除控件。內容面板不會讓你直接放在它上面,而是讓你放在活動頁面(子面板)上。操作面板還有一個「默認」模式,它在其中創建標準4個按鈕(prev,next,cancel,finish)。我主要實現了自定義模式,因此我可以使用它,即使用DevEx按鈕而不是標準的Winforms按鈕。

標題基本上是靜態的,它是一個PictureBoxLabel,圖像,文本和字體可自定義。 (默認情況下,文本與頁面標題相同,字體是添加了粗體風格的控件字體)。

再就是由API暴露一組數據結構的:

  • 步驟(與名稱,標題等,還指定是否應該在側邊欄被鏈接)
  • 工作流程(即你在哪裏下一個根據你的選擇)
  • 驗證事件(同步和異步)
  • 操作(被前運行/換頁,點擊按鈕等)
  • 過渡短跑運動員後拍攝我做了這些爲了好玩,用戶喜歡他們

我把這些步驟的自定義集合編輯器放在一起,反過來創建如上所述的內容面板的子面板。每個面板只是直接添加到控件集合中,但根據活動的步驟屬性,一次只能看到一個面板。我記得對接似乎沒有正常工作,所以我不得不重寫所有的resize方法。我從來沒有想過創建一個智能標籤來輕鬆地在頁面之間翻轉,但是可以在屬性網格上選擇活動頁面(或頁面索引)。

然後,我還必須包括一大堆鉤子來在單個頁面上插入任何自定義邏輯。很難在沒有發佈所有代碼的情況下真正瞭解更多細節。

正確設計和測試是非常耗時的,但我不記得使用任何whizbang設計技巧,只能從各個UI元素的角度(如運行時和運行時設計時間)和數據結構以及它們如何相互作用。

請記住所有這些都是爲了創建一個可重用的嚮導組件,因爲我們需要爲特定的應用程序開發其中約10個(並且它對於其他項目也派上用場)。如果我只需要一個快速的嚮導,就可能不會解決所有這些問題,我只會做你正在做的事情 - 使用一個選項卡控件和幾個流程面板。或者更好的是,我現在可以使用許多Winforms庫中的現成嚮導控件,如DX庫。