如何根据数据库用户信息动态启用/禁用ToolStripMenuItem?

时间:2017-05-20 19:02:51

标签: mysql vb.net winforms

我有2个表格。一个是登录表单,一个是工作空间表单(设置为带有ToolStripMenuItem控件的mdi容器)。

workspace form = f1
login form = f2

我的应用程序首先加载f1,然后同时加载f2。我在f1加载期间加载f2的代码如下:

Dim uLogin As New frm2
'set the parent form of child window
uLogin.MdiParent = Me
uLogin.Show()

在正确的密码和用户ID之后,应该卸载f2,进入工作区并根据用户表禁用菜单项:

'i have put this piece of code after success login function
Dim dr As Datarow
Dim userDS As Dataset
Dim userDT As Datatable
userDS = some sql db query
userDT = userDS.Tables(0)
If userDT.Rows.Count > 0 Then
    dr = userDT.Rows(0)
End If

For Each dr In userDT.Rows

    Dim ParentMenu As New  ToolStripMenuItem(dr.Item("MI_MenuName").ToString)
    ParentMenu.Enabled = CBool(dr.Item("RR_menuIsEnabled"))

Next dr

这是示例数据库用户表:

This is the sample db user table

我的应用程序UX:

My application UX

没有错误,用户已登录,但菜单项的启用/禁用无法按预期工作。查询TSQL是正确的,并使用VS 2005和MS SQL。

1 个答案:

答案 0 :(得分:0)

假设您的主MenuStrip被称为“MenuStrip1”,并且其Modifiers()属性已更改为Public,您可以使用以下代码:

Dim f1 As frm1 = DirectCast(Me.MdiParent, frm1)
For Each dr In userDT.Rows
    Dim mnuName As String = dr.Item("MI_MenuName").ToString()
    Dim mnus() As ToolStripMenuItem = f1.MenuStrip1.Items.Find(mnuName, True)
    If mnus.Length > 0 Then
        mnus(0).Enabled = CBool(dr.Item("RR_menuIsEnabled"))
    End If
Next dr