Habilitar o Deshabilitar MenusStrip Items

22/06/2006 - 16:44 por Manekurt | Informe spam
Hola a todos, tengo que definir ceirtos permisos a distintos usuarios.
La idea es escribir en la base de datos, si un usuario tiene o no permisos
para acceder a distinos módulos
Los mismos se acceden desde un MenuStrip
EJEMPLO:

usuario - módulo - acceso
1 A1 1
1 A2 0
1 A3 0
1 A4 1
1 A5 0


El usuario 1 tiene acceso al módulo A1 y A4, por ende si yo selecciono de la
base de datos,
sus accesos quiero poder cambiar una propiedad de un item de esta forma.

me.A1.enabled = true

donde A1, viene de un valor en un String.
En definitiva, mi pregunta es, como hacer referencia al nombre de un
control, por medio de un
valor que tengo en String.


Gracias! saludos
 

Leer las respuestas

#1 Luis Miguel Blanco
23/06/2006 - 07:25 | Informe spam
Hola Manekurt

Para obtener esta funcionalidad que necesitas puedes implementar un
algoritmo que recorra recursivamente tu menú, de forma que vas obteniendo
cada uno de los objetos ToolStripMenuItem que lo componen y comprobando,
mediante su propiedad Name, si es la opción que necesitas habilitar,
asignando Enabled = True cuando así sea.

Te adjunto un código de ejemplo para que puedas probarlo y adaptarlo si te
es válido.

'///////////////////////////////
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
' el primer parámetro es el objeto MenuStrip del formulario
' el segundo parámetro el nombre de la opción a habilitar
Me.RecorrerEstructuraMenu(Me.mnuAplicacion, "mnuGuardar")
End Sub

Private Sub RecorrerEstructuraMenu(ByVal oMenu As MenuStrip, ByVal sOpcion
As String)
' en este método recorremos las opciones de la barra
' principal (el primer nivel) de la colección de elementos
' del menú del formulario
For Each oOpcionMenu As ToolStripMenuItem In oMenu.Items
' si una opción de menú de la barra de primer nivel
' tiene a su vez opciones, llamar a otro método que
' será el que recorra estas subopciones
If oOpcionMenu.DropDownItems.Count > 0 Then
Me.RecorrerSubmenu(oOpcionMenu.DropDownItems, sOpcion)
End If
Next
End Sub

Private Sub RecorrerSubmenu(ByVal oSubmenuItems As ToolStripItemCollection,
ByVal sOpcion As String)
' en este método recorremos las opciones de nivel inferior
' de una opción de menú principal, y si alguna de estas opciones
' tiene a su vez submenús, volvemos a llamar recursivamente a
' este método para ir profundizando en el siguiente nivel,
' y así sucesivamente
For Each oSubitem As ToolStripMenuItem In oSubmenuItems
' si encontramos la opción que necesitamos, habilitarla
If oSubitem.Name = sOpcion Then
oSubitem.Enabled = True
End If

If oSubitem.DropDownItems.Count > 0 Then
Me.RecorrerSubmenu(oSubitem.DropDownItems, sOpcion)
End If
Next
End Sub
'///////////////////////////////

Espero que te sirva de ayuda.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Manekurt" wrote:

Hola a todos, tengo que definir ceirtos permisos a distintos usuarios.
La idea es escribir en la base de datos, si un usuario tiene o no permisos
para acceder a distinos módulos
Los mismos se acceden desde un MenuStrip
EJEMPLO:

usuario - módulo - acceso
1 A1 1
1 A2 0
1 A3 0
1 A4 1
1 A5 0


El usuario 1 tiene acceso al módulo A1 y A4, por ende si yo selecciono de la
base de datos,
sus accesos quiero poder cambiar una propiedad de un item de esta forma.

me.A1.enabled = true

donde A1, viene de un valor en un String.
En definitiva, mi pregunta es, como hacer referencia al nombre de un
control, por medio de un
valor que tengo en String.


Gracias! saludos









Preguntas similares