Lista de Controles en un formulario

16/10/2009 - 19:39 por Edilberto Arteaga | Informe spam
Hola a Todos
Tengo un formulario base con una serie de controles (barras de herramientas)
del cual heredan mis demás formularios he creado un método en el que recorro
todos los objetos que estén en el formulario

protected virtual void
VerificarControles(System.Windows.Forms.Control.ControlCollection __obj__,
bool __valor__, string __str__)
{
foreach (Control __oo__ in __obj__)
{
if (__oo__.HasChildren)
VerificarControles(__oo__.Controls, __valor__, __str__);
if (__oo__.Tag != null)
if (__oo__.Tag == __str__)
__oo__.Enabled = __valor__;
}
}

pero nunca me encuentra los objetos dentro de las barras de herramientas ni
en los menus contextuales, puedo ver los grid, textbox, list etc pero no los
mencionados si ven el código por cada control que encuentro verifico si
tiene controles dentro para seguir examinándolo y así llegar al nivel mas
bajo.

Preguntas similare

Leer las respuestas

#1 SoftJaén
17/10/2009 - 12:05 | Informe spam
"Edilberto Arteaga" escribió:

Tengo un formulario base con una serie de controles (barras de
herramientas) del cual heredan mis demás formularios he creado un método
en el que recorro todos los objetos que estén en el formulario

pero nunca me encuentra los objetos dentro de las barras de herramientas
ni en los menus contextuales, puedo ver los grid, textbox, list etc pero
no los mencionados si ven el código por cada control que encuentro
verifico si tiene controles dentro para seguir examinándolo y así llegar
al nivel mas bajo.




Hola, Edilberto:

Si estás utilizando un control del tipo ToolStrip, éste no tiene controles
que deriven de la clase Control, por tanto, no puedes recorrer su colección
Controls, porque no tiene ningún control. Tiene una colección de elementos
ToolStripItem, la cual puedes recorrerla de la siguiente manera:

foreach (ToolStripItem item in this.toolStrip1.Items)
{
// obtenemos el nombre del elemento ToolStripItem.
//
MessageBox.Show(item.Name);

}

La colección Controls la puedes utilizar cuando expresamente se han añadido
controles a dicha colección, como es el caso de los controles que se añaden
a un formulario, pero no es el caso de los elementos existentes en un
control del tipo ToolStrip.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#2 Edilberto Arteaga
19/10/2009 - 22:58 | Informe spam
Gracias me ha funcionado con los objetos del toolbox
//Aqui verifico los objetos de los toolbox
foreach (object __obj in barManager1.Items)
{
if (__obj.GetType().Name == "BarButtonItem")
{
DevExpress.XtraBars.BarButtonItem __item =
(DevExpress.XtraBars.BarButtonItem) __obj;
if (__item.Tag == __str__)
__item.Enabled = __valor__;
}
}
eso me funciona bien porque tengo los objetos en el formulario base, ahora
tengo un problemilla, los formularios que heredan de este algunos de ellos
contienen menús contextuales que no existen en el formulario base solo en
los hijos, como podría hacer para verificar desde el base que existan esos
controles y también aplicarles la validación de los demas objetos


"SoftJaén" escribió en el mensaje de
noticias:
"Edilberto Arteaga" escribió:

Tengo un formulario base con una serie de controles (barras de
herramientas) del cual heredan mis demás formularios he creado un método
en el que recorro todos los objetos que estén en el formulario

pero nunca me encuentra los objetos dentro de las barras de herramientas
ni en los menus contextuales, puedo ver los grid, textbox, list etc pero
no los mencionados si ven el código por cada control que encuentro
verifico si tiene controles dentro para seguir examinándolo y así llegar
al nivel mas bajo.




Hola, Edilberto:

Si estás utilizando un control del tipo ToolStrip, éste no tiene controles
que deriven de la clase Control, por tanto, no puedes recorrer su
colección Controls, porque no tiene ningún control. Tiene una colección de
elementos ToolStripItem, la cual puedes recorrerla de la siguiente manera:

foreach (ToolStripItem item in this.toolStrip1.Items)
{
// obtenemos el nombre del elemento ToolStripItem.
//
MessageBox.Show(item.Name);

}

La colección Controls la puedes utilizar cuando expresamente se han
añadido controles a dicha colección, como es el caso de los controles que
se añaden a un formulario, pero no es el caso de los elementos existentes
en un control del tipo ToolStrip.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.




Respuesta Responder a este mensaje
#3 SoftJaén
20/10/2009 - 15:40 | Informe spam
"Edilberto Arteaga" preguntó:

los formularios que heredan de este algunos de ellos contienen menús
contextuales que no existen en el formulario base solo en los hijos, como
podría hacer para verificar desde el base que existan esos controles y
también aplicarles la validación de los demas objetos




Siempre y cuando los controles ContextMenuStrip tengan un ámbito de acceso
«public» o «internal», puedes referenciar al formulario heredado para
recorrer su colección de elementos ToolStripMenuItem:

// Referenciamos el formulario heredado
//
FormHeredado frm = new FormHeredado();

foreach (ToolStripMenuItem item in frm.contextMenuStrip1.Items)
{
// obtenemos el nombre del elemento ToolStripItem.
//
MessageBox.Show(item.Name);

}

frm = null;

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#4 Edilberto Arteaga
20/10/2009 - 19:59 | Informe spam
ummm creo que no me explique
En mi formulario base quiero tenr algo asi

Protected void VerificarObjetos()
//Recorrer coleccion de Controles (Esto ya lo hice)

//Recorrer ToolBox que estan en Form Base (Tambien ya lo hice )

//Verificar desde Base si hay Otros objetos en el heredado
//por ejemplo
Si Formulario Contiene ContexMenuStrip //desde el Base no se como se
llama el Menu
Recorrer el Menu
Validaciones a los Item del Menu

algo asi es lo que necesito ya que desde el Formulario base no sabre si
existe o no un Menu Contextual en el formulario hijo y mucho menos se el
nombre, es el mismo caso con la coleccion de Control pero esa al recorrerla
tengo acceso a cada uno de los item q le pertenece aunq ellos solo existan
en el heredado, los puedo tratar desde el Base





"SoftJaén" escribió en el mensaje de
noticias:#
"Edilberto Arteaga" preguntó:

los formularios que heredan de este algunos de ellos contienen menús
contextuales que no existen en el formulario base solo en los hijos, como
podría hacer para verificar desde el base que existan esos controles y
también aplicarles la validación de los demas objetos




Siempre y cuando los controles ContextMenuStrip tengan un ámbito de acceso
«public» o «internal», puedes referenciar al formulario heredado para
recorrer su colección de elementos ToolStripMenuItem:

// Referenciamos el formulario heredado
//
FormHeredado frm = new FormHeredado();

foreach (ToolStripMenuItem item in frm.contextMenuStrip1.Items)
{
// obtenemos el nombre del elemento ToolStripItem.
//
MessageBox.Show(item.Name);

}

frm = null;

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#5 SoftJaén
21/10/2009 - 18:16 | Informe spam
"Edilberto Arteaga" escribió:

ummm creo que no me explique
En mi formulario base quiero tenr algo asi

//Verificar desde Base si hay Otros objetos en el heredado
//por ejemplo
Si Formulario Contiene ContexMenuStrip //desde el Base no se como se
llama el Menu

algo asi es lo que necesito ya que desde el Formulario base no sabre si
existe o no un Menu Contextual en el formulario hijo y mucho menos se el
nombre, es el mismo caso con la coleccion de Control pero esa al
recorrerla tengo acceso a cada uno de los item q le pertenece aunq ellos
solo existan en el heredado, los puedo tratar desde el Base



Pues lo siento, pero yo tampoco sé cómo se puede recorrer la colección de
componentes de un formulario heredado desde el formulario base, sin saber el
nombre del formulario heredado, que en un proyecto se llamará de una manera
y en otro de otra manera diferente.

Lo mismo con técnicas de reflexión se podrá hacer, pero en estos momentos no
caigo.

La verdad que no entiendo muy bien lo que deseas hacer, porque cuando se
hereda de un formulario o de cualquier otra clase, es para ampliar o
extender el formulario o la clase base, de ahí que el formulario base no
tenga por qué preocuparse de lo que ha ampliado o extendido una clase
heredera suya.

Si un formulario heredado se encuentra actualmente abierto, desde el
formulario base puedes obtener una referencia a dicho formulario utilizando
la siguiente función:

public Form ObtenerFormHeredado(string formBaseName)
{

foreach (Form frm in Application.OpenForms)
{
if (frm.GetType().BaseType.Name == formBaseName)
{
return frm;
}
}

return null;

}

En tiempo de ejecución llamarías a la función de la siguiente manera:

// Obtenemos una referencia del formulario
// heredado que actualmente se encuentra abierto.

Form frm = ObtenerFormHeredado("Form1");

if (frm == null){return;}

foreach (Control ctrl in frm.Controls)
{
MessageBox.Show(ctrl.Name);
}

Ahora, a ver cómo te las apañas para referenciar el campo privado
«components» existente en cada formulario, sin saber el nombre del
formulario heredado. :-)


Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida