當應用程序啓動時,我不會去實例化45個窗體的路線。這會嚴重延長啓動時間,並可能(如果不是很可能)耗盡您的內存資源,所有這些都會提供您的用戶甚至不需要的功能。
在我的WinMo應用程序中,每個表單都設計用於處理相對較小的數據子集,因此啓動時間僅限於數據庫調用並將數據加載到表單的控件中。通常,實例化這些表單中的一個並顯示它所需的時間不會超過一秒或兩秒。
如果您的表單花費的時間比此更長,那麼您的數據檢索或數據加載到表單控件的方式可能存在問題(例如,您可能有一個自定義的gridview控件,可以完全呈現所有的表單300行,即使一次只能看到12行)。如果您的數據太大以至於合法需要很長時間才能檢索,那麼數據遠遠多於用戶實際上可以進行交互的數據。
我假設你提及「5部分」以獲取用戶需要去的地方意味着他們可能(最多)「向下鑽取」5個層次。如果您通過讓每個表單實例化並使用ShowDialog
顯示下一個表單來實現這一點,那麼在任何時候最多隻能存在5-6個表單,這對於.Net CF應用程序來說應該不會有任何問題(我這樣做每時每刻)。通過這種方式,您無需執行任何特別的操作,即可隨時隨地打開表單,並在表單關閉時自動返回到調用表單,從而跟蹤應顯示哪種表單。
有,你必須處理一些z順序/任務管理器的怪事,但它不是特別複雜。在子窗體上調用ShowDialog
之前,將父窗體的Text
屬性設置爲空字符串,然後在ShowDialog
返回後將其設置回窗體的原始標題。這並非嚴格必要,但在Windows Mobile(至少到版本6)中,即使所有打開的.Net窗體(具有非空白Text屬性)都顯示在「正在運行的程序」列表中,即使它們全部相同應用。我通常喜歡我的多表單應用程序看起來只是一個程序,所以我通常將每種表單的Text
設置爲應用程序的名稱)。
我也嘗試過一種單一形式的應用程序,它將每個UI作爲UserControl而不是Form來實現,然後創建並堆疊控件,就像創建和打開表單一樣。這工作,但它是一個黑客,我不推薦它。表單有Load事件,而UserControls沒有,這是主要問題。
啊,但是如果你在這些UserControls周圍使用框架,你可以創建你自己的Load事件。 – ctacke 2010-04-30 21:54:36
Bah,我甚至不再使用* controls * - 我只是在屏幕上使用BitBlt。 :) – MusiGenesis 2010-04-30 21:56:48
哦,我有一個窗體與47 UserControls的意見。但有趣的是我有一個自定義控件,用於在每個視圖上顯示*每個* UI元素。基本上,爲了獲得所需的alphablending,我需要做一個「瑞士軍刀」控制,將其與定製繪畫混合並放棄工具箱中的所有其他部分。啊CF發展的樂趣。 – ctacke 2010-04-30 22:03:01