MenuItem

18/10/2006 - 16:56 por Juan Suarez | Informe spam
Hola que tal?

En una aplicacion Windows tengo un formulario con un menu, a traves de una
clase quiero acceder a la coleccion de menues, Lo estoy haciendo de la
siguiente manera:

public static void HabilitarMenu(Form frmFormulario, String strMenu)
{
foreach(Control ctrlControl in frmFormulario.Controls)
{
if (ctrlControl is MenuItem)
}

En el if, quiero mo me reconoce los elementos del menu como pertencientes a
Controls.

Alguien sabe como controlar esto?

Hasta pronto y muchas gracias.

P/D: Trabajo con VS2003 y Framework 1.1.
Juan Suarez

Preguntas similare

Leer las respuestas

#1 Roberto M. Oliva
18/10/2006 - 17:31 | Informe spam
Hola!

Que nombre le has dado al control del menu? Porque lo que buscas es tan
sencillo como:

frmFormulario.menuitem1.Enabled = false;

Si no puedes acceder a MenuItem es porque lo has definido como private
o protected. Tienes dos opciones:
- Cambiar el nivel de acceso de la variable a Public (Propiedades del
menu: Modificadores (Modifiers en ingles))
- Crear un accessor en el formulario:
public MenuItem ObtenerMenu
{
get{ return menuitem1;}
}

y luego acceder al menu de la siguiente manera:

frmFormulario.ObtenerMenu.Enabled = false;

Espero que te ayude

Un saludo
Roberto M. Oliva



Juan Suarez ha escrito:

Hola que tal?

En una aplicacion Windows tengo un formulario con un menu, a traves de una
clase quiero acceder a la coleccion de menues, Lo estoy haciendo de la
siguiente manera:

public static void HabilitarMenu(Form frmFormulario, String strMenu)
{
foreach(Control ctrlControl in frmFormulario.Controls)
{
if (ctrlControl is MenuItem)
}

En el if, quiero mo me reconoce los elementos del menu como pertencientes a
Controls.

Alguien sabe como controlar esto?

Hasta pronto y muchas gracias.

P/D: Trabajo con VS2003 y Framework 1.1.
Juan Suarez
Respuesta Responder a este mensaje
#2 Juan Suarez
18/10/2006 - 18:50 | Informe spam
Hola Roberto.

Sin necesidad de cambiar el Modifier a Public me funciona de esta manera:

MenuItem1.Enabled = false;

Yo quiero hacerlo a traves de una clase, le paso com parametro el nombre del
formulario y el nombre del menu y aqui es donde no me funciona. Cuando
intento a traves del foreach acceder a los elementos clases del formulario.
si tengo un boton, solo me muesta eso. No accede a la clase del menuItem.

No me queda muy claro lo del accesor.

Suerte y muchas gracias.

Juan Suarez
"Roberto M. Oliva" escribió en el mensaje
news:
Hola!

Que nombre le has dado al control del menu? Porque lo que buscas es tan
sencillo como:

frmFormulario.menuitem1.Enabled = false;

Si no puedes acceder a MenuItem es porque lo has definido como private
o protected. Tienes dos opciones:
- Cambiar el nivel de acceso de la variable a Public (Propiedades del
menu: Modificadores (Modifiers en ingles))
- Crear un accessor en el formulario:
public MenuItem ObtenerMenu
{
get{ return menuitem1;}
}

y luego acceder al menu de la siguiente manera:

frmFormulario.ObtenerMenu.Enabled = false;

Espero que te ayude

Un saludo
Roberto M. Oliva



Juan Suarez ha escrito:

Hola que tal?

En una aplicacion Windows tengo un formulario con un menu, a traves de
una
clase quiero acceder a la coleccion de menues, Lo estoy haciendo de la
siguiente manera:

public static void HabilitarMenu(Form frmFormulario, String strMenu)
{
foreach(Control ctrlControl in frmFormulario.Controls)
{
if (ctrlControl is MenuItem)
}

En el if, quiero mo me reconoce los elementos del menu como pertencientes
a
Controls.

Alguien sabe como controlar esto?

Hasta pronto y muchas gracias.

P/D: Trabajo con VS2003 y Framework 1.1.
Juan Suarez



Respuesta Responder a este mensaje
#3 Roberto M. Oliva
18/10/2006 - 19:27 | Informe spam
Hola Juan

Te funciona porque seguramente el objeto Menu es privado al Formulario.
Quiere decir que solo lo puedes acceder desde el propio formulario.
Si quieres acceder al menu desde otra clase, tienes que hacer lo que te
digo: O hacer publico el menu o hacer un accessor :

public class frmFormulario : Form
{


private MenuItem MenuItem1; // Esto lo ha generado el VS
automaticamente

// Creamos un accesor para que se puede acceder al menu desde otras
clases:
public MenuItem ObtenerMenu
{
get{
return MenuItem1;
}
}



}

Tienes que tener claro que un formulario es una clase, y que los
miembros de dicha clase tienen un nivel de visibilidad (public, private
y protected) que definen como se puede acceder a dichos miembros desde
la propia clase o desde otras.

Un saludo
Roberto M. Oliva

Juan Suarez ha escrito:

Hola Roberto.

Sin necesidad de cambiar el Modifier a Public me funciona de esta manera:

MenuItem1.Enabled = false;

Yo quiero hacerlo a traves de una clase, le paso com parametro el nombre del
formulario y el nombre del menu y aqui es donde no me funciona. Cuando
intento a traves del foreach acceder a los elementos clases del formulario.
si tengo un boton, solo me muesta eso. No accede a la clase del menuItem.

No me queda muy claro lo del accesor.

Suerte y muchas gracias.

Juan Suarez
"Roberto M. Oliva" escribió en el mensaje
news:
> Hola!
>
> Que nombre le has dado al control del menu? Porque lo que buscas es tan
> sencillo como:
>
> frmFormulario.menuitem1.Enabled = false;
>
> Si no puedes acceder a MenuItem es porque lo has definido como private
> o protected. Tienes dos opciones:
> - Cambiar el nivel de acceso de la variable a Public (Propiedades del
> menu: Modificadores (Modifiers en ingles))
> - Crear un accessor en el formulario:
> public MenuItem ObtenerMenu
> {
> get{ return menuitem1;}
> }
>
> y luego acceder al menu de la siguiente manera:
>
> frmFormulario.ObtenerMenu.Enabled = false;
>
> Espero que te ayude
>
> Un saludo
> Roberto M. Oliva
>
>
>
> Juan Suarez ha escrito:
>
>> Hola que tal?
>>
>> En una aplicacion Windows tengo un formulario con un menu, a traves de
>> una
>> clase quiero acceder a la coleccion de menues, Lo estoy haciendo de la
>> siguiente manera:
>>
>> public static void HabilitarMenu(Form frmFormulario, String strMenu)
>> {
>> foreach(Control ctrlControl in frmFormulario.Controls)
>> {
>> if (ctrlControl is MenuItem)
>> }
>>
>> En el if, quiero mo me reconoce los elementos del menu como pertencientes
>> a
>> Controls.
>>
>> Alguien sabe como controlar esto?
>>
>> Hasta pronto y muchas gracias.
>>
>> P/D: Trabajo con VS2003 y Framework 1.1.
>> Juan Suarez
>
Respuesta Responder a este mensaje
#4 Bela Istok
18/10/2006 - 19:48 | Informe spam
Hola, es mas sencillo de lo que parece, en realidad los menus no son
controles de la formas son hijos de el menu principal, deberias poder
accederlos a traves de Forma.Menu.MenuItems (ya que aqui es donde se
almacenan), y cada MenuItem a su ves puede contener sub-menues así que esto
debes tenerlo en cuenta tambien.

Saludos,

Bela Istok

"Juan Suarez" wrote in message
news:
Hola que tal?

En una aplicacion Windows tengo un formulario con un menu, a traves de una
clase quiero acceder a la coleccion de menues, Lo estoy haciendo de la
siguiente manera:

public static void HabilitarMenu(Form frmFormulario, String strMenu)
{
foreach(Control ctrlControl in frmFormulario.Controls)
{
if (ctrlControl is MenuItem)
}

En el if, quiero mo me reconoce los elementos del menu como pertencientes
a Controls.

Alguien sabe como controlar esto?

Hasta pronto y muchas gracias.

P/D: Trabajo con VS2003 y Framework 1.1.
Juan Suarez

Respuesta Responder a este mensaje
#5 Juan Suarez
18/10/2006 - 23:34 | Informe spam
Hola que tal?

Antes que nada quiero agradecerles por sus respuestas.
He solucionado el problema de la siguiente manera:
En una clase tengo el sigueinte codigo:

public static void HabilitarMenu(Form frmFormulario, String strMenu)
{
//Empiezo con el nivel Cero del MenuItem
for (int intNivel0 =0; intNivel0 < frmFormulario.Menu.MenuItems.Count ;
intNivel0++)
{
if (frmFormulario.Menu.MenuItems[intNivel0].Text == strMenu)
frmFormulario.Menu.MenuItems[intNivel0].Enabled = true;
//Continuo con el nivel 1 del MenuItem
for (int intNivel1 = 0; intNivel1 <
frmFormulario.Menu.MenuItems[intNivel0].MenuItems.Count ; intNivel1++)
{
if (frmFormulario.Menu.MenuItems[intNivel0].MenuItems[intNivel1].Text
== strMenu)
frmFormulario.Menu.MenuItems[intNivel0].MenuItems[intNivel1].Enabled
= true;
//Sigo con el Nivel 2 del MenuItem
for (int intNivel2 = 0; intNivel2 <
frmFormulario.Menu.MenuItems[intNivel0].MenuItems[intNivel1].MenuItems.Count
; intNivel2++)
{
if
(frmFormulario.Menu.MenuItems[intNivel0].MenuItems[intNivel1].MenuItems[intNivel2].Text
== strMenu)
frmFormulario.Menu.MenuItems[intNivel0].MenuItems[intNivel1].MenuItems[intNivel2].Enabled=true;
//Vamos aqui con el nivel 3
for (int intNivel3 = 0; intNivel3 <
frmFormulario.Menu.MenuItems[intNivel0].MenuItems[intNivel1].MenuItems[intNivel2].MenuItems.Count;
intNivel3++)
if
(frmFormulario.Menu.MenuItems[intNivel0].MenuItems[intNivel1].MenuItems[intNivel2].MenuItems[intNivel3].Text
== strMenu)
frmFormulario.Menu.MenuItems[intNivel0].MenuItems[intNivel1].MenuItems[intNivel2].MenuItems[intNivel3].Enabled=true;
}
}
}
}

Es capaz de ir habilitando hasta el nivel tres, empezando desde el Nivel 0,
no es necesario que el Modifier del Menu sea public.

Luego desde el formulario en el cual lo necesito, lo llamo de la siguiente
manera.

Class1.HabilitarMenu(this,"Prueba 2");

Formulario y nombre del Menu, respectivamente.

Suerte y muchas gracias.
Juan Suarez
"Bela Istok" escribió en el mensaje
news:
Hola, es mas sencillo de lo que parece, en realidad los menus no son
controles de la formas son hijos de el menu principal, deberias poder
accederlos a traves de Forma.Menu.MenuItems (ya que aqui es donde se
almacenan), y cada MenuItem a su ves puede contener sub-menues así que
esto debes tenerlo en cuenta tambien.

Saludos,

Bela Istok

"Juan Suarez" wrote in message
news:
Hola que tal?

En una aplicacion Windows tengo un formulario con un menu, a traves de
una clase quiero acceder a la coleccion de menues, Lo estoy haciendo de
la siguiente manera:

public static void HabilitarMenu(Form frmFormulario, String strMenu)
{
foreach(Control ctrlControl in frmFormulario.Controls)
{
if (ctrlControl is MenuItem)
}

En el if, quiero mo me reconoce los elementos del menu como pertencientes
a Controls.

Alguien sabe como controlar esto?

Hasta pronto y muchas gracias.

P/D: Trabajo con VS2003 y Framework 1.1.
Juan Suarez




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida