Recorrer todos los elementos de un menu

24/03/2006 - 12:08 por CC | Informe spam
Hola a todos:

Alguien sabe como recorrer (por codigo) todos los elementos de un menu
MenuStrip: Menu, submenu, subsubmenu, .

Gracias por vuestra ayuda

Natalia
 

Leer las respuestas

#1 Luis Miguel Blanco
24/03/2006 - 21:10 | Informe spam
Hola Natalia

Para conseguir esta funcionalidad que mencionas, es necesario implementar un
algoritmo recursivo, ya que debemos tener en cuenta que un objeto MenuStrip
contiene los elementos u opciones de la barra principal en la propiedad
Items, que no es otra cosa que una colección ToolStripItemCollection.

Cada uno de los elementos de esa colección, es también una opción de menú,
que a su vez puede tener opciones dependientes a las que accedemos a través
de la propiedad DropDownItems, y así sucesivamente para cada opción que tenga
subopciones.

Supongamos un formulario con una estructura de menú como la siguiente:

Archivo
-Abrir
-Cerrar
Editar
-Copiar
-Pegar

Ahora añadimos un botón al formulario, y un listbox. Al pulsar el botón
vamos a ejecutar el código que te muestro a continuación, que se encargará de
recorrer la estructura de opciones del menú, e ir plasmándola en el listbox.
Observa que en uno de los métodos utilizamos recursividad, para recorrer los
submenús de las opciones que lo tengan.

'//////////////////////////////////////////////
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Me.RecorrerEstructuraMenu(Me.mnuMenu)
End Sub

Private Sub RecorrerEstructuraMenu(ByVal oMenu As MenuStrip)
' 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
Me.lstListaMenu.Items.Add(oOpcionMenu.Text)

' 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, "-")
End If
Next
End Sub

Private Sub RecorrerSubmenu(ByVal oSubmenuItems As
ToolStripItemCollection, ByVal sGuiones 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
Me.lstListaMenu.Items.Add(sGuiones & oSubitem.Text)

If oSubitem.DropDownItems.Count > 0 Then
Me.RecorrerSubmenu(oSubitem.DropDownItems, sGuiones & "-")
End If
Next
End Sub
End Class
'//////////////////////////////////////////////

Si estás interesada en el proyecto que contiene este ejemplo, facilítame una
dirección email y te lo envío. Puedes encontrar mi dirección email en:

http://www.dotnetmania.com/Autores/index.html

Espero que este ejemplo te sea de utilidad.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"CC" wrote:

Hola a todos:

Alguien sabe como recorrer (por codigo) todos los elementos de un menu
MenuStrip: Menu, submenu, subsubmenu, .

Gracias por vuestra ayuda

Natalia



Preguntas similares