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

Preguntas similare

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









Respuesta Responder a este mensaje
#2 Carlos Gómez
23/06/2006 - 19:03 | Informe spam
Además de lo indicado por Luis Miguel, no te sería mas flexible con una
tabla en la base de datos asi?:

Formulario - NombreControl - Usuario - Acceso
Form1 A1 1 1
Form1 A2 1 0
y asi:
Form2 A1 1 0

De esta forma, puedes usar de campos claves Formulario y NombreControl, y
ademas te quitas del engorro de tener que nombrar los controles de forma
unica para que no se pisen entre distintos formularios

Desde Aguadulce - España
Carlos Gomez
Respuesta Responder a este mensaje
#3 Manekurt
26/06/2006 - 21:01 | Informe spam
Muchas gracias Luis Miguel.
Tengo un error en la siguiente linea porque

For Each oSubitem As ToolStripMenuItem In oSubmenuItems

error: Message="No se puede convertir un objeto de tipo
'System.Windows.Forms.ToolStripSeparator' al tipo
'System.Windows.Forms.ToolStripMenuItem'."



Se que el motivo es por hace un For con un tipo de datos distinto, pero no
se como controlarlo.

Saludos y gracias

"Luis Miguel Blanco" escribió
en el mensaje news:
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









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida