Recorrer la coleccion de items de un MenuStrip

03/05/2006 - 18:47 por Lorena | Informe spam
Hola.

El menu de mi aplicación es un control MenuStrip. Pretendo deshabilitar
determinados SubMenus de cada uno de los items del MenuStrip. Consiguo
recorrer cada uno de los menus del MenuStrip, pero no consigo obtener la
coleccion de SubMenus (DropDownItems).

Este es el código que utilizo para recorrer la collecion de items del menu:

For Each mnuItem As ToolStripItem In MenuStrip1.Items
/*Aqui deberia obtener la collecion del mnuItem
For Each mnuSubItem As ToolStripDropDownItem In mnuItem.*
If mnuSubItem.Name = strNomMenu Then
mnuSubItem.Enabled = False
End If
Next
Next

¿Alguien sabe como podría recorrer los submenus?

Gracias. Saludos

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
03/05/2006 - 21:12 | Informe spam
Hola,

reutilizando un código reciente del foro, te indico;

Creamos una declaración:
Private strNomMenu As String = "lalala"

Y llamamos a una rutina que se encargará de llamar a los métodos que
recorrerán el control Menu.
Me.RecorrerEstructuraMenu(Me.MenuStrip1)

Los métodos que utilizamos son los siguientes:

Private Sub RecorrerEstructuraMenu(ByVal oMenu As MenuStrip)
For Each oOpcionMenu As ToolStripMenuItem In oMenu.Items
oOpcionMenu.Text = strNomMenu
If oOpcionMenu.DropDownItems.Count > 0 Then
Me.RecorrerSubmenu(oOpcionMenu.DropDownItems, "-")
End If
Next
End Sub

Private Sub RecorrerSubmenu(ByVal oSubmenuItems As
ToolStripItemCollection, ByVal sGuiones As String)
For Each oSubitem As ToolStripItem In oSubmenuItems
If oSubitem.GetType Is GetType(ToolStripMenuItem) Then
oSubitem.Text = strNomMenu
If CType(oSubitem, ToolStripMenuItem).DropDownItems.Count >
0 Then
Me.RecorrerSubmenu(CType(oSubitem,
ToolStripMenuItem).DropDownItems, sGuiones & "-")
End If
End If
Next
End Sub


Por otro lado, respecto a tu código, comentarte que hay un error en el uso
de mnuItem, ya que cuando vas a recorrerlo, no es una colección.

Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Lorena" wrote:

Hola.

El menu de mi aplicación es un control MenuStrip. Pretendo deshabilitar
determinados SubMenus de cada uno de los items del MenuStrip. Consiguo
recorrer cada uno de los menus del MenuStrip, pero no consigo obtener la
coleccion de SubMenus (DropDownItems).

Este es el código que utilizo para recorrer la collecion de items del menu:

For Each mnuItem As ToolStripItem In MenuStrip1.Items
/*Aqui deberia obtener la collecion del mnuItem
For Each mnuSubItem As ToolStripDropDownItem In mnuItem.*
If mnuSubItem.Name = strNomMenu Then
mnuSubItem.Enabled = False
End If
Next
Next

¿Alguien sabe como podría recorrer los submenus?

Gracias. Saludos



Respuesta Responder a este mensaje
#2 Lorena
04/05/2006 - 18:58 | Informe spam
Hola de nuevo. He probado lo que me has dicho, y no he conseguido hacerlo
funcionar. No me aclaro mucho.
Lo que quiero es hacer un control de los menus, de manera que segun los
permisos de cada usuario los menus sean visibles o no.

Necesito recorrer todos los menus. Un ejemplo seria por ejemplo en windows,
recorrer Archivo\Nuevo\Documento
Cuando todos los menus que hay dentro de Nuevo son invisibles tendria que
hacer invisible el menu Nuevo, y si todos los
menus de Archivo son invisibles tendria que hacer invisible el menu Archivo

A continuacion expongo mi codigo:

'Funcion para recorrer la estructura del menu MDI
Private Sub RecorrerEstructuraMenu(ByVal oMenu As MenuStrip, ByVal
strNomMenu As String)
For Each oOpcionMenu As ToolStripMenuItem In oMenu.Items
Dim nContador As Integer 'contador para contar el numero de
submenus de oOpcionMenu
If oOpcionMenu.DropDownItems.Count > 0 Then 'Si tiene submenus
Call RecorrerSubMenu(oOpcionMenu, strNomMenu)
For i As Integer = 0 To oOpcionMenu.DropDownItems.Count - 1
'Recorro todos los submenus
If oOpcionMenu.DropDownItems(i).Visible = False Then
nContador += 1 'Cuento el numero de submenus que
estan invisibles
End If
Next
If nContador = oOpcionMenu.DropDownItems.Count Then 'Si
todos los Submenus estan invisibles
oOpcionMenu.Visible = False
End If
End If
Next
End Sub

'Funcion para recorrer los SubMenus de cada Menu del MDI
Private Sub RecorrerSubMenu(ByVal oSubMenuItems As ToolStripMenuItem,
ByVal strNomSubMenu As String)
Dim nContador As Integer = 0
For Each oSubItem As ToolStripItem In oSubMenuItems.DropDownItems
If oSubItem.GetType Is GetType(ToolStripMenuItem) Then
If CType(oSubItem, ToolStripMenuItem).DropDownItems.Count >
0 Then
Call RecorrerSubMenu(oSubItem, strNomSubMenu)
For i As Integer = 0 To CType(oSubItem,
ToolStripMenuItem).DropDownItems.Count - 1
If CType(oSubItem,
ToolStripMenuItem).DropDownItems(i).Visible = False Then
nContador += 1
End If
Next
If nContador = CType(oSubItem,
ToolStripMenuItem).DropDownItems.Count Then
oSubItem.Visible = False
End If
Else
If oSubItem.Name = strNomSubMenu Then
oSubItem.Visible = False
End If
End If
Else
oSubItem.Visible = False
End If
Next
End Sub

Si alguien sabe la solucion me seria de gran ayuda. Muhas Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida