我在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,我不关闭它。我一直打开它,直到申请结束。
第一个按钮,用于打开Work1表单。当用户点击它时,它将打开LogIn Form,用户必须输入用户名和密码:
frmLogin = New LogIn(OpenForm.F_WORK1)
frmLogin.showDialog()
第二个按钮,用于打开Work2表单。当用户点击它时,它将打开LogIn Form,用户必须输入用户名和密码:
frmLogin = new LogIn(OpenForm.F_WORK2)
frmLogin.showDialog()
在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表单不会关闭。
问题:
感谢您的帮助。
答案 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,否则任务栏中的可视化是自动的。
第三个问题很难回答。一种可能的解决方案是使用选项卡控件在选项卡页中划分输入控件。每个页面都应包含一个用户控件,其中包含该页面的相应输入。除了第一个页面之外的每个页面都将留空,并且只有当用户更改所选页面时才会加载相应的用户控件。正如您所看到的,这是一个非常复杂的主题,如果没有您的一些研究,就无法完全解释。