Sí tienen un menú en vb.net y quieren habilitar y deshabilitar menus y submenus es un poco gorrroso, cree esta rutina recursiva que creo que puede ser útil. Sí leen por ejemplo de una tabla los privilegios de usuario (donde tienen guardado el nombre de la opción de menú y un campo de habilita/deshabilita) pues sólo tienen que hacer la llamada a estas rutinas de la siguiente manera
call SetMenuItem(Me.MenuStrip, "mnu_usuario", True)
La función barre menús y submenus y actualiza el valor. Lo mejor es crear una clase para estas funciones, pasando de parametro el control menustrip.
Aquí van las functions:
Private Function prvSetMenuItem(ByRef pMenu As MenuStrip, ByVal pItemName As String, ByVal pEnabled As Boolean)
Dim lcToolStripMenuItem As ToolStripMenuItem
lcToolStripMenuItem = prvFindToolStripMenuItem(pMenu.Items, pItemName)
If lcToolStripMenuItem IsNot Nothing Then
lcToolStripMenuItem.Enabled = pEnabled
Return True
Else
Return False
End If
End Function
Private Function prvFindToolStripMenuItem(ByRef pMenu As ToolStripItemCollection, ByVal pItemName As String) As ToolStripMenuItem
Dim lbFound As Boolean = False
Dim lcToolStripItem As ToolStripMenuItem
Dim lcTmpToolStripMenuItem As ToolStripMenuItem
lcToolStripItem = pMenu(pItemName)
If lcToolStripItem Is Nothing Then
Dim i As Integer = 0
While Not lbFound And i < pMenu.Count
If pMenu(i).GetType Is GetType(ToolStripMenuItem) Then
lcTmpToolStripMenuItem = pMenu(i)
lcToolStripItem = prvFindToolStripMenuItem(lcTmpToolStripMenuItem.DropDownItems, pItemName)
lbFound = (lcToolStripItem IsNot Nothing)
End If
i += 1
End While
End If
Return lcToolStripItem
End Function
call SetMenuItem(Me.MenuStrip, "mnu_usuario", True)
La función barre menús y submenus y actualiza el valor. Lo mejor es crear una clase para estas funciones, pasando de parametro el control menustrip.
Aquí van las functions:
Private Function prvSetMenuItem(ByRef pMenu As MenuStrip, ByVal pItemName As String, ByVal pEnabled As Boolean)
Dim lcToolStripMenuItem As ToolStripMenuItem
lcToolStripMenuItem = prvFindToolStripMenuItem(pMenu.Items, pItemName)
If lcToolStripMenuItem IsNot Nothing Then
lcToolStripMenuItem.Enabled = pEnabled
Return True
Else
Return False
End If
End Function
Private Function prvFindToolStripMenuItem(ByRef pMenu As ToolStripItemCollection, ByVal pItemName As String) As ToolStripMenuItem
Dim lbFound As Boolean = False
Dim lcToolStripItem As ToolStripMenuItem
Dim lcTmpToolStripMenuItem As ToolStripMenuItem
lcToolStripItem = pMenu(pItemName)
If lcToolStripItem Is Nothing Then
Dim i As Integer = 0
While Not lbFound And i < pMenu.Count
If pMenu(i).GetType Is GetType(ToolStripMenuItem) Then
lcTmpToolStripMenuItem = pMenu(i)
lcToolStripItem = prvFindToolStripMenuItem(lcTmpToolStripMenuItem.DropDownItems, pItemName)
lbFound = (lcToolStripItem IsNot Nothing)
End If
i += 1
End While
End If
Return lcToolStripItem
End Function