obntener nombre del MenuItem

18/02/2006 - 14:51 por Gaston P | Informe spam
Hola,

estoy en una formulario mdi, del cual obtengo la coleccion de menus del
formulario mdiParent, mediante la coleccion MenuItems...

pero estoy necesitan conocer el nombre de estos MenuItems.
y no puedo acceder a la propiedad Name

agrecido si pueden ayudarme...

Preguntas similare

Leer las respuestas

#1 Harold V
18/02/2006 - 20:21 | Informe spam
espero te ayude...

Me.MyMenu.Items(0).Text)
Respuesta Responder a este mensaje
#2 jboscaroli
20/02/2006 - 14:16 | Informe spam
lamentablemente con esa propiedad obtengo el texto pero no el nombre
"Harold V" escribió en el mensaje
news:
espero te ayude...

Me.MyMenu.Items(0).Text)
Respuesta Responder a este mensaje
#3 Luis Miguel Blanco
21/02/2006 - 23:37 | Informe spam
Hola Gaston

La propiedad Name de la clase MenuItem tiene la particularidad de que sólo
es accesible en modo de diseño, no siendo posible recuperar su valor en
tiempo de ejecución.

Por este motivo, si por ejemplo tienes en tu formulario un menú con el
nombre MainMenu1, que contiene entre su conjunto de opciones, un MenuItem con
el valor "mnuConsultar" en la propiedad Name, no puedes hacer algo parecido a
lo siguiente para recuperar el contenido de dicha propiedad:

'//////////////////////////
Dim oMenuItem As MenuItem
' asumimos que el MenuItem que nos interesa está en la posición 2
' de la colección de MenuItems del menú principal del formulario
oMenuItem = Me.MainMenu1.MenuItems(2)
Dim sValor as String
sValor = oMenuItem.Name()
'//////////////////////////

En esta situación, debemos recurrir a las capacidades de Reflection del
Framework, para obtener la información que nos interesa sobre un tipo de la
plataforma.

Supongamos que necesitamos acceder al objeto MenuItem en cuestión a través
de la propiedad Name para cambiar el estado de su propiedad Checked, en ese
caso, en primer lugar debemos obtener el tipo (objeto Type) del formulario
que alberga el menú.

Seguidamente utilizando el tipo del formulario, obtenemos un array
(PropertyInfo) con la información de todos los elementos del formulario.

A continuación recorremos el array comprobando el tipo de cada elemento;
cuando se trate de un tipo MenuItem, accedemos a la propiedad Name de dicho
tipo, pero ya sabemos que no se puede directamente por MenuItem, por lo cual,
utilizamos el objeto PropertyInfo que sí nos da este valor, y en el caso de
que sea el MenuItem que nos interesa, cambiamos el estado de su propiedad
Checked.

Te adjunto un pequeño ejemplo de código de lo que te acabo de explicar.

'//////////////////////////

Dim oInfoPropiedad As PropertyInfo
Dim oElementoForm As Object
Dim oMenuItem As MenuItem
Dim sMenuItemName As String
Dim oFormType As Type = Me.GetType()
Dim aInfoPropiedades() As PropertyInfo =
oFormType.GetProperties(BindingFlags.Instance + _
BindingFlags.Public + BindingFlags.NonPublic + BindingFlags.DeclaredOnly)

For Each oInfoPropiedad In aInfoPropiedades
oElementoForm = oInfoPropiedad.GetValue(Me, Nothing)

If oElementoForm.GetType() Is GetType(MenuItem) Then
oMenuItem = CType(oElementoForm, MenuItem)

If oInfoPropiedad.Name = "mnuConsultar" Then
oMenuItem.Checked = Not oMenuItem.Checked
End If
End If
Next
'//////////////////////////

Espero que te sirva de ayuda y lo puedas adaptar para solucionar tu problema.


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


"Gaston P" wrote:

Hola,

estoy en una formulario mdi, del cual obtengo la coleccion de menus del
formulario mdiParent, mediante la coleccion MenuItems...

pero estoy necesitan conocer el nombre de estos MenuItems.
y no puedo acceder a la propiedad Name

agrecido si pueden ayudarme...



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