如何在VB.NET中管理多个表单

时间:2012-11-01 13:41:33

标签: vb.net forms

我在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

我在Module中声明了它的所有对象:

  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. 第一个按钮,用于打开Work1表单。当用户点击它时,它将打开LogIn Form,用户必须输入用户名和密码:

      

    frmLogin = New LogIn(OpenForm.F_WORK1)

         

    frmLogin.showDialog()

  2. 第二个按钮,用于打开Work2表单。当用户点击它时,它将打开LogIn Form,用户必须输入用户名和密码:

      

    frmLogin = new LogIn(OpenForm.F_WORK2)

         

    frmLogin.showDialog()

  3. 在LogIn表单中,有一个名为btnLogin的按钮。这是LogIn表单代码:

     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
    

    然后打开Work1或Wor2表单。但LogIn表单不会关闭。


    问题:

    1. 我想在用户点击btnLogin后关闭LogIn Form并打开Work1或Work2 Form。
    2. 当用户最小化Work1或Work2表单时,我希望Home Form也最小化。当用户鼠标移动任务栏时,我希望它预览我打开的Form。
    3. 每个表单(Home Form,Work1 Form和Work2表单)都包含许多控件,使我的用户界面非常慢而且不流畅。所以我希望它首先加载它的包含,然后看到Form。
    4. 感谢您的帮助。

1 个答案:

答案 0 :(得分: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方法并传递所有者表单时,这两个表单绑定为togheter,并最小化fmrWork1 / 2也应该最小化frmHome。除非您将表单ShowInTaskbar属性设置为false,否则任务栏中的可视化是自动的。

第三个问题很难回答。一种可能的解决方案是使用选项卡控件在选项卡页中划分输入控件。每个页面都应包含一个用户控件,其中包含该页面的相应输入。除了第一个页面之外的每个页面都将留空,并且只有当用户更改所选页面时才会加载相应的用户控件。正如您所看到的,这是一个非常复杂的主题,如果没有您的一些研究,就无法完全解释。