2012-11-01 36 views
0

我在vb.net有五種表單。如何在VB.NET中管理多個表單

1. Welcome Form 
    2. Home Form 
    3. LogIn Form 
    4. Work1 Form 
    5. Work2 Form 

而且一個枚舉:

Public Enum OpenForm 
     F_WORK1=1 
     F_WORK2=2 
    End Enum 

而且我宣佈其所有的對象模塊:

Public frmHome As Home 
    Public frmLogin As LogIn 
    Public frmWork1 As Work1 
    Public frmWork2 As Work2 

然後,當歡迎窗體加載:

Me.Hide() 
frmHome = New Home 
frmHome.show() 

而且在Home Form中,有兩個按鈕。和Home Form,我不關閉它。我一直打開它,直到應用程序關閉。

  1. 第一個按鈕,用於打開工作1表格。當用戶點擊它,它會打開登錄表單和用戶必須輸入用戶名和密碼:

    frmLogin =新的登錄(OpenForm.F_WORK1)

    frmLogin.showDialog()

  2. 第二個按鈕,用於打開Work2表單。當用戶點擊它,它會打開登錄表單和用戶必須輸入用戶名和密碼:

    frmLogin =新的登錄(OpenForm.F_WORK2)

    frmLogin.showDialog()

在LogIn Form中,有一個名爲btnLogin的按鈕。這裏是登錄表單代碼:

Private frm As OpenForm 

Public Sub New(f as OpenForm) 
    InitailizeComponent() 
    frm = f 
End Sub 

而當用戶點擊btnLogin:

If frm=OpenForm.F_WORK1 Then 
    frmWork1 = New Work1() 
    frmWork1.showDialog(frmHome) 
    frmLogin.Close() 
ElseIf frm=OpenForm.F_WORK2 Then 
    frmWork2 = New Work2() 
    frmWork2.showDialog(frmHome) 
    frmLogin.Close() 
End If 

然後工作1或Wor2形式打開。但LogIn窗體不關閉。


的問題:

  1. 我想關閉登錄表單,並打開工作1或WORK2形式的用戶點擊之後btnLogin。
  2. 而當用戶最小化Work1或Work2表單時,我希望Home表單也最小化。當用戶鼠標移動任務欄時,我想要預覽我打開了哪個窗體。
  3. 每個窗體(主頁窗體,工作1窗體和工作2窗體)都包含很多控件,導致我的用戶界面非常慢並且不平滑。所以我希望它首先載入它的包含,然後可見的窗體。

感謝您的幫助。

+0

使用Show()而不是ShowDialog() –

+0

我已經使用過了。但它運作不好。 – Ericton

回答

1

您的主頁表格知道在登錄成功後打開什麼樣的正確表單。
讓它決定中的第一個按鈕

frmLogin = New LogIn() 
if DialogResult.OK = frmLogin.showDialog() then 
    frmWork1 = New Work1() 
    frmWork1.showDialog(frmHome) 
end if 

在第二個按鈕,打開

其形式

frmLogin = New LogIn() 
if DialogResult.OK = frmLogin.showDialog() then 
    frmWork2 = New Work2() 
    frmWork2.showDialog(frmHome) 
end if 

您的實際代碼不會因爲ShowDialog的工作停止後續的執行直到由ShowDialog關閉的窗體打開代碼。它被稱爲模態形式。

忘記說要將btnLogin的DialogResult屬性設置爲DialogResult.OK。
這會告訴框架在用戶按下該按鈕時自動關閉登錄表單。
相反,如果用戶驗證失敗,請將frmLogin.DialogResult屬性設置爲DialogResult.None以阻止自動窗體關閉。

對於第二個問題,它應該已經以這種方式工作。當您調用ShowDialog方法並傳遞所有者窗體時,這兩個窗體將綁定到屏幕上,並且最小化fmrWork1/2也應該最小化frmHome。任務欄中的可視化是自動的,除非您已將ShowInTaskbar屬性設置爲false。

第三個問題很難回答。一種可能的解決方案是使用選項卡控件將輸入控件劃分爲選項卡頁面。每個頁面應包含一個用戶控件,併爲該頁面提供適當的輸入。除第一頁以外的每頁都將空着,只有當用戶更改所選頁面時,纔會加載相應的用戶控件。正如你所看到的,這是一個非常複雜的話題,如果你沒有一點研究,就不能完全解釋。

+0

你好,先生。那麼問題2和問題3呢?你有什麼解決方案......? – Ericton

相關問題