【问题标题】:How to enable/disable ToolStripMenuItem dynamically based on database user info?如何根据数据库用户信息动态启用/禁用 ToolStripMenuItem?
【发布时间】:2017-05-20 19:02:51
【问题描述】:

我有 2 个表格。一种是登录表单,一种是工作区表单(设置为带有ToolStripMenuItem 控件的mdi Container)。

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()

密码和userid正确后,f2应该被卸载,进入工作区,禁用基于user表的菜单项:

'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

这是示例数据库用户表:

我的应用程序用户体验:

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

【问题讨论】:

    标签: mysql vb.net winforms


    【解决方案1】:

    假设您的主 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
    

    【讨论】:

    • 嗨,谢谢。我的主菜单条被称为 MenuStrip1 是正确的。但是还是报错:Name 'MenuStrip1' is not declared
    • 您必须尝试在表单的外部使用此代码?如果是这样,您需要将对 Form 或 MenuStrip 的引用传递到您尝试从中访问它的位置。给我更多关于你的设置的细节......
    • 那么在MdiChild中运行的代码叫“frm2”吗?
    • 是的。 frm2 是我提示用户输入用户名和密码的登录表单。一旦它们正确,frm2 将被关闭,而 frm1(即 mdi 容器)将保持激活(打开)。
    • 好的。选择 MenuStrip1 并将其 Modifiers() 属性更改为 Public。那么上面的编辑代码应该可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2020-09-11
    • 2011-02-03
    • 2017-12-27
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多