0

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

    frmLogin = 新登录(OpenForm.F_WORK1)

    frmLogin.showDialog()

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

    frmLogin = 新登录(OpenForm.F_WORK2)

    frmLogin.showDialog()

在登录表单中,有一个名为 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

然后 Work1 或 Wor2 表单打开。但是登录表单没有关闭。


问题:

  1. 我想在用户单击 btnLogin 后关闭登录表单并打开 Work1 或 Work2 表单。
  2. 当用户最小化 Work1 或 Work2 表单时,我希望 Home Form 也最小化。当用户鼠标移动任务栏时,我希望它预览我打开的表单。
  3. 每个表单(Home Form、Work1 Form 和 Work2 Form)都包含很多控件,这些控件使我的用户界面非常缓慢且不流畅。所以我希望它先加载它的包含,然后再看到表单。

感谢您的帮助。

4

1 回答 1

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,否则任务栏中的可视化是自动的。

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

于 2012-11-01T13:47:48.243 回答