2009-04-24 36 views
2

我試圖修改使用多個表單的C#WinForms應用程序。在啓動時,將顯示一個登錄窗口。如果用戶使用正確的用戶名和密碼組合登錄,則具有三個不同選項卡的表單將顯示爲一種管理員視圖。如果未提供密碼或用戶名,則會顯示一個非常簡化的GUI。它基本上由兩個按鈕組成,它們依次顯示這兩種形式,具體取決於按下哪個按鈕:在C#應用程序中處理多個表單

按鈕1:授予用戶訪問由多個文本框組成的表單的權限,用戶可以在其中輸入信息保存到數據庫。一旦DB操作成功執行,帶有兩個按鈕的第一個表單將再次顯示。

按鈕2:顯示錶單,用戶可以在其中輸入將寫入數據庫的代碼。一旦數據庫操作結束,用戶將自動返回到原來的形式與兩個按鈕。

這兩種表格都會有一個後退按鈕,讓用戶回到第一個表格。我有很多邏輯,但我不確定如何最好地處理所有涉及的表單。我應該在哪裏實例化第一個(登錄)表單?登錄驗證完成後,有兩種可行的方法。顯示選項卡式管理員表單(如果用戶名和密碼正確)或帶有兩個大按鈕的簡化用戶表單。也應該可以從管理員窗體註銷,以便顯示簡化的GUI。

我希望我在這裏有道理。我只需要一個很好的方式來處理它們之間的所有窗體和導航。目前,它們之間並沒有真正的數據傳輸需求,但未來可能會成爲一個問題,所以考慮到這一點的解決方案將非常出色。

我在想,所需要的實際上是一個類,它從一開始就處理表單的顯示和處理,但我不太清楚應該在哪裏放置此處理類的實例。

+1

根據您對客戶端的信任以及您的網絡情況,您可能需要將數據庫操作移至應用服務器,並在運行前仔細檢查憑證。 – 2009-04-24 09:05:11

回答

3

表單管理可能是一個棘手的問題。有一些不同的方法去:

  • 只是有形式浮在屏幕上。讓一些靜態類持有對不同形式的引用,並公開激活它們的方法。
  • 將窗體實現爲UserControls,將它們放到同一個窗體中,並根據需要顯示和隱藏控件(這也可以通過加載窗體,剝離窗體邊框等來實現,並將它們的父窗體設置爲面板或其他類似的,這幾乎會讓他們的行爲與用戶控制,但只差一點)
  • 還有很多其他的方法,當然,O)

當它涉及到管理的登錄表單,我會做,在主要方法;顯示登錄表單,檢查憑據,然後實例化要顯示的UI並將其傳遞給Application.Run方法。

+0

確實有點棘手。 :)一些很好的建議,我沒有想到,謝謝。第一點似乎是一個非常合理的解決方案,因爲我希望能夠保持已有的表格儘可能完整,而不必在這些表格中重寫太多的代碼。 – Henric 2009-04-24 08:44:11

5

我只是做了類似的事情。我有一套表格可以像規範所稱的那樣管理爲「頁面」。我也有嚴格的頁面流程,比你的要複雜一點。我會通過它與你談談。

我設計了作爲UserControl的交互的每個「頁面」,並創建了「OuterForm」和「Controller」。控制器有一個Navigate(string pageName)方法,外部表單包含一個面板,並有一個Display(Control page)方法,該方法清除面板上的子項並添加替換項。

我用過春天。NET來配置控制器和表單並使用setter注入來創建兩者之間的雙向鏈接。這意味着我的主要方法可以向Spring請求窗體,並使用Application.Run(form)顯示它;

我創建了一個便捷方法來從事件處理程序訪問控制器, Controller.Instance.Navigate(chosenPage);控制器還使用Spring.NET爲selectedPage加載正確的UserControl,然後在主窗體上調用Display()它加載的實例。沒有任何用戶控件中的Spring.NET代碼,也沒有新的關鍵字;-)

我使用Spring.NET的好處是我有一個窗體類只監視一些業務邏輯並顯示進度指示。我能夠實現這一點,並配置注入了不同業務邏輯的表單的許多實例,這些業務邏輯將監控它。另外,我需要將接口存儲到特定領域的硬件和Web服務。最終我也將頁面流轉移到了配置中。

+0

聽起來像一個非常乾淨和良好的解決方案。我會保留它,看看我能想出什麼。謝謝! – Henric 2009-04-24 09:05:07

1

你有沒有考慮過使用Composite UI框架?在你的情況下,你可以使用WinForms和CAB

其中一個最大的優勢是支持基於角色的認證。經過身份驗證的會話可以匹配一個角色,未經身份驗證的會話可以匹配另一個角色。因此,您可以根據用戶的角色顯示不同的屏幕。

另一個優點是誰負責實例化屏幕的問題的答案。這由控制器管理,並且屏幕上的操作(例如按鈕點擊)可以將事件發送到該控制器。

最後但並非最不重要的是,有一些很好的樣本可用,並且對更高級的方案有明確的支持。

+0

感謝您的提示。我會盡快調查CAB。 :-) – Henric 2009-04-26 15:01:39

相關問題