我有一个MDI Parent表单,其中包含应用程序的menustrip。我的应用程序启动文件是MDI Parent表单,在加载时调用子登录表单。代码如下:
Dim myForm As Form = New Login
Dim formResult As DialogResult = myForm.ShowDialog()
If formResult = Windows.Forms.DialogResult.OK Then
If LoginSucceeded = True Then
Me.tabMainMenu.Visible = True
ApplyUserAccess(eApp.DataAccess.DAL_UserSettings.SelectMenuSettingByUserID(glbUserID))
myForm.Dispose()
End If
End If
menustrip有一个Logout标签,单击该标签会禁用菜单条并再次显示登录表单。 布尔字段LoginSucceeded确定用户凭证的成功验证,并根据给予该用户的访问权限设置菜单。我的问题是第一次根据用户的访问权限正确设置MDI父级的主菜单。注销并再次登录后,我想再次相应地设置主菜单,这不会发生。
MDI Parent上的Form_Load事件只执行一次。
在第二次接收焦点时重新绘制MDI父级的任何提示。
谢谢, ZK
我的注销代码如下:
Dim blnLogout As DialogResult = MessageBox.Show("Are You Sure You Want To Logout?", "eApp", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If blnLogout = Windows.Forms.DialogResult.Yes Then
SetToolbarMenuStyle()
tabMainMenu.Visible = False
LoginSucceeded = False
blnShowLoginTab = True
Dim myForm As Form = New Login
myForm.MdiParent = Me
myForm.WindowState = FormWindowState.Normal
myForm.Show()
End If
答案 0 :(得分:0)
以下是对您的代码的假设,我猜你在Form.Load事件中添加了有关代码的内容。只有在第一次显示表单时才会引发Form.Load
事件。
根据MSDN Form.Load活动
在首次显示表单之前发生。
现在,当您注销时,您将表单的visibility
设置为false。因此,我建议您将代码从Form.Load
事件移至Form.VisibleChanged
事件。
根据MSDN Form.Load活动
当Visible属性值更改时发生。
答案 1 :(得分:0)
将您的登录代码移动到主窗体中自己的方法,以便多次调用它:
Public Class Form1
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown ValidateLogin()
ValidateLogin()
End Sub
Private Sub LoginLogoutToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LoginLogoutToolStripMenuItem.Click
ValidateLogin()
End Sub
Private Sub ValidateLogin()
' disable appropriate main form elements so they can't access anything:
Me.tabMainMenu.Visible = False
Using myForm As New Login
If myForm.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
' login succeeded: re-enable main form elements
Me.tabMainMenu.Visible = True
ApplyUserAccess(eApp.DataAccess.DAL_UserSettings.SelectMenuSettingByUserID(glbUserID))
Else
MessageBox.Show("Login Failed")
End If
End Using
End Sub
End Class
您也不需要“LoginSucceeded”变量。您可以通过在登录表单中将DialogResult设置为OK来将成功/失败传递回主表单:
Public Class Login
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If True Then ' <-- perform your check
Me.DialogResult = Windows.Forms.DialogResult.OK ' only return OK if login has succeeded
End If
End Sub
End Class