2009-04-30 82 views
1

所以我認爲自己是一個.Net和ASP.NET專業版,但是我對Windows Mobile有點新(我的目標是.NET 3.5 CF和Windows Mobile 6)。Windows Mobile - 只保留一個窗體。最好的設計問題

我正在創建一個數據驅動的應用程序,將有3-4個表。我爲每個表格創建了一個允許用戶搜索表格的表格。

每個表單都從主窗體中嵌入,以便它們每個都具有相同的菜單。

我的問題是如何確保只有一個窗口打開。我想讓用戶進入菜單並選擇一個表格來打開一個新表格。我不想要的是用戶打開說每種形式,然後當他們完成必須關閉3或4個窗口。這可能嗎?如果是這樣,我該怎麼做?在附註中有更好的方法來做到這一點。我不希望我的所有邏輯都在一個表格上。所以我不只是想隱藏和展示面板。

回答

1

我保留一些我稱之爲應用程序中心的東西,儘管如此。

因此,每個菜單點擊都會調用應用程序中心,每個表單都會引用它。

然後,當切換窗體時,應用程序中心需要跟蹤當前窗體,關閉它,然後加載請求的窗體。

這是沒有太多的代碼來寫,並表現良好。

或...性能明智,保持應用程序中心的想法,並保持對話框打開。它的表現會更好,而不是一直重新加載表單。

然後關閉時,應用程序中心可以檢查哪些表單已打開(它應該有每個運行表單的引用)並關閉它們以供用戶使用。

1

而不是有多個窗體(繼承形式mainForm),你可以把表的東西放在UserControls上,並且對其創建/銷燬/可見性的控制更容易。 使用接口或BaseUserControl來實現通用功能。

+0

這也是我的首選模式。 :) – Quibblesome 2009-05-01 16:10:01

1

這篇文章,雖然不完全是你問,是非常有益的,當我重新設計一個.NET CF應用:Creating a Multiple Form Application Framework for the .NET Compact Framework

我的應用程序需要進行一些兩全其美的 - 我想有一個單一的形式開放,但也有時想在第一個表單上疊加一個輔助表單(例如,如果他們轉到Prefs頁面或某種其他類型的表單,他們應該在一會兒之後纔會解僱它)。

(此後僞編碼)
我創建了一個ViewManager並將其作爲一個單例實現。當應用第一次啓動時,我調用ViewManager.GotoForm(frm)。這將當前表單設置爲我需要的任何形式。 然後我立即調用ViewManager.CurrentForm.ShowDialog() - 我確信有更好的方法,但我發現我不得不在某處調用ShowDialog()來獲取表單。

隨後對ViewManager的調用可以採用.ReplaceForm或.StackForm的形式。差異應該相當直觀。
你也可以在像這樣的視圖管理器中做的事情是緩存表單,這些表單沒有被顯示,但可能會再次出現並且設置成本很高(例如,在數據驅動的應用程序中,您可能必須查詢數據庫確定要在表單上顯示的字段或表,並且這在運行時不會更改)。

這裏的訣竅是,您從不在應用程序中的任何位置調用.Show()或.ShowDialog() - 您通過視圖管理器路由所有表單導航,該視圖管理器負責加載表單的下一個實例,處理舊錶單如果沒有被緩存),並且如果你想在加載之前將新數據傳遞給表單的UI,則調度任何種類的填充邏輯。