¡¡¡¡¡REFLEXION!!!!

02/02/2005 - 19:41 por Irak Rubio | Informe spam
Hola, estoy desarrollando una aplicacion VBnet y necesito iterar por todos
los formularios que tengo en el proyecto para obtener los controles que
contiene cada uno, según he leido que la Reflexión me permite hacer eso, pero
la verdad es que he leído mucho de eso pero nada que me pueda ayudar, Yo
quiero algo mas o menos así:

Suponiendo que tengo tres formularios:

dim f as new Form
For each f in (quiensabeque de la reflexion para hacer referencia)

Preguntas similare

Leer las respuestas

#1 Morgan
03/02/2005 - 00:31 | Informe spam
Dim Grupo As System.Windows.Forms.Control
For Each Grupo In Me.Controls
MsgBox(Grupo.GetType().ToString & "- " & Grupo.Name)
Next

te muestra el tipo y el nombre del control, sera suficiente para lo que
buscas?

Saludos ... Miguel Angel Martínez Morgan ... 8-)
[ MS - MVP - Visual Basic ] [ Cancún, Quintana Roo, México ]
[ Todas las preguntas al foro, así nos beneficiamos todos ]

DISCLAIMER: «Este mensaje se proporciona "como está" sin garantías de
ninguna indole, y no otorga ningún derecho.»

Irak Rubio wrote:
Hola, estoy desarrollando una aplicacion VBnet y necesito iterar por
todos los formularios que tengo en el proyecto para obtener los
controles que contiene cada uno, según he leido que la Reflexión me
permite hacer eso, pero la verdad es que he leído mucho de eso pero
nada que me pueda ayudar, Yo quiero algo mas o menos así:

Suponiendo que tengo tres formularios:

dim f as new Form
For each f in (quiensabeque de la reflexion para hacer referencia)
Respuesta Responder a este mensaje
#2 Irak Rubio
03/02/2005 - 04:15 | Informe spam
Así es, mas o menos, es perfecto porque me devuelve el
nombre de los formularios contenidos en el proyecto.
Pero (aún hay más) la variable que me regresa en cada
iteracion del For Each debe tener referencia al formulario
en cuestión para que a su vez pueda iterar por todos los controles del
mismo, mas o menos así:

Dim Grupo As System.Windows.Forms.Control
dim X as integer
For Each Grupo In Me.Controls
MsgBox(Grupo.GetType().ToString & "- " & Grupo.Name)
(suponiendo que la variable grupo apuntara al objeto real)
for x=0 to Grupo.Controls.Count -1
if typeof controls(x) is
. . . . . .(Obtengo los controles de cada form de mi proyecto)

Endif
Next
Next

Es decir; casi estamos en la solución, y a lo mejor no me explique por
completo. pero en sí esa es la idea.

Te agradezco muchisimo tu aportación y si pudieras apoyarme más, sería
estupendo...


"Morgan" wrote:

Dim Grupo As System.Windows.Forms.Control
For Each Grupo In Me.Controls
MsgBox(Grupo.GetType().ToString & "- " & Grupo.Name)
Next

te muestra el tipo y el nombre del control, sera suficiente para lo que
buscas?

Saludos ... Miguel Angel Martínez Morgan ... 8-)
[ MS - MVP - Visual Basic ] [ Cancún, Quintana Roo, México ]
[ Todas las preguntas al foro, así nos beneficiamos todos ]

DISCLAIMER: «Este mensaje se proporciona "como está" sin garantías de
ninguna indole, y no otorga ningún derecho.»

Irak Rubio wrote:
> Hola, estoy desarrollando una aplicacion VBnet y necesito iterar por
> todos los formularios que tengo en el proyecto para obtener los
> controles que contiene cada uno, según he leido que la Reflexión me
> permite hacer eso, pero la verdad es que he leído mucho de eso pero
> nada que me pueda ayudar, Yo quiero algo mas o menos así:
>
> Suponiendo que tengo tres formularios:
>
> dim f as new Form
> For each f in (quiensabeque de la reflexion para hacer referencia)



Respuesta Responder a este mensaje
#3 Irak Rubio
03/02/2005 - 04:27 | Informe spam
Corrección:
Perdón me equivoqué al afirmar que el script me devuelve el nombre de los
formularios contenidos, el script me devuelve el nombre de los controles que
contiene el formulario...
Ahora como obtengo los formularios del proyecto??????
Gracias.
"Irak Rubio" wrote:

Así es, mas o menos, es perfecto porque me devuelve el
nombre de los formularios contenidos en el proyecto.
Pero (aún hay más) la variable que me regresa en cada
iteracion del For Each debe tener referencia al formulario
en cuestión para que a su vez pueda iterar por todos los controles del
mismo, mas o menos así:

Dim Grupo As System.Windows.Forms.Control
dim X as integer
For Each Grupo In Me.Controls
MsgBox(Grupo.GetType().ToString & "- " & Grupo.Name)
(suponiendo que la variable grupo apuntara al objeto real)
for x=0 to Grupo.Controls.Count -1
if typeof controls(x) is
. . . . . .(Obtengo los controles de cada form de mi proyecto)

Endif
Next
Next

Es decir; casi estamos en la solución, y a lo mejor no me explique por
completo. pero en sí esa es la idea.

Te agradezco muchisimo tu aportación y si pudieras apoyarme más, sería
estupendo...


"Morgan" wrote:

> Dim Grupo As System.Windows.Forms.Control
> For Each Grupo In Me.Controls
> MsgBox(Grupo.GetType().ToString & "- " & Grupo.Name)
> Next
>
> te muestra el tipo y el nombre del control, sera suficiente para lo que
> buscas?
>
> Saludos ... Miguel Angel Martínez Morgan ... 8-)
> [ MS - MVP - Visual Basic ] [ Cancún, Quintana Roo, México ]
> [ Todas las preguntas al foro, así nos beneficiamos todos ]
>
> DISCLAIMER: «Este mensaje se proporciona "como está" sin garantías de
> ninguna indole, y no otorga ningún derecho.»
>
> Irak Rubio wrote:
> > Hola, estoy desarrollando una aplicacion VBnet y necesito iterar por
> > todos los formularios que tengo en el proyecto para obtener los
> > controles que contiene cada uno, según he leido que la Reflexión me
> > permite hacer eso, pero la verdad es que he leído mucho de eso pero
> > nada que me pueda ayudar, Yo quiero algo mas o menos así:
> >
> > Suponiendo que tengo tres formularios:
> >
> > dim f as new Form
> > For each f in (quiensabeque de la reflexion para hacer referencia)
>
>
>
Respuesta Responder a este mensaje
#4 Eduardo A. Morcillo [MS MVP VB]
03/02/2005 - 04:40 | Informe spam
Ahora como obtengo los formularios del proyecto??????



Puedes obtener los formularios que estan definidos en el proyecto usando
Reflection, pero para poder recorrer los controles necesitaras una instancia
de los formulario. ¿Lo que quieres es recorrer los que estan cargados o
todos?

' Obtengo el ensamblado
Dim asm As Reflection.Assembly = Reflection.Assembly.GetCallingAssembly

' Obtengo todos los tipos definidos en el ensamblado
Dim types() As Type = asm.GetTypes()

' Obtengo el tipo System.Windows.Forms.Form
Dim formType As Type = GetType(System.Windows.Forms.Form)

' Recorro los tipos buscando aquellos que
' hereden de System.Windows.Forms.Form
For i As Integer = 0 To types.Length - 1

' Hereda de Form?
If formType.IsAssignableFrom(types(i)) Then
Console.WriteLine(types(i))
End If

Next

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Jamás ha habido un niño tan adorable,
que la madre no quiera poner a dormir.\Ralph Waldo Emerson
Respuesta Responder a este mensaje
#5 Irak Rubio
03/02/2005 - 20:53 | Informe spam
Si., asi es, tengo que recorrer todos los formularios
aunque no esten cargados..
voy a probar tu ejemplo,
¡gracias! ;-)

"Eduardo A. Morcillo [MS MVP VB]" wrote:

> Ahora como obtengo los formularios del proyecto??????

Puedes obtener los formularios que estan definidos en el proyecto usando
Reflection, pero para poder recorrer los controles necesitaras una instancia
de los formulario. ¿Lo que quieres es recorrer los que estan cargados o
todos?

' Obtengo el ensamblado
Dim asm As Reflection.Assembly = Reflection.Assembly.GetCallingAssembly

' Obtengo todos los tipos definidos en el ensamblado
Dim types() As Type = asm.GetTypes()

' Obtengo el tipo System.Windows.Forms.Form
Dim formType As Type = GetType(System.Windows.Forms.Form)

' Recorro los tipos buscando aquellos que
' hereden de System.Windows.Forms.Form
For i As Integer = 0 To types.Length - 1

' Hereda de Form?
If formType.IsAssignableFrom(types(i)) Then
Console.WriteLine(types(i))
End If

Next

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Jamás ha habido un niño tan adorable,
que la madre no quiera poner a dormir.\Ralph Waldo Emerson



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