Pasar como parámetro un tipo

29/10/2004 - 00:20 por Oscar | Informe spam
Hola,

Se puede hacer algo así?

Sub MostrarFormulario(Formulario as Form, Clave as long, Titulo as string)
Dim MiForm as Formulario
MiForm.Tag=Clave
MiForm.Caption=Titulo
MiForm.Show
MiForm=Nothing
End Sub

y luego..., la llamada para cargar un formulario, sea cual sea,

MostrarFormulario(frmClientes, id, nombre)

Gracias y un saludo,
Oscar

Preguntas similare

Leer las respuestas

#1 DJ MIAO
29/10/2004 - 00:48 | Informe spam
Comprate un libro.




Miao...
Comoprate un libro.
Hola,

Se puede hacer algo así?

Sub MostrarFormulario(Formulario as Form, Clave as long,


Titulo as string)
Dim MiForm as Formulario
MiForm.Tag=Clave
MiForm.Caption=Titulo
MiForm.Show
MiForm=Nothing
End Sub

y luego..., la llamada para cargar un formulario, sea


cual sea,

MostrarFormulario(frmClientes, id, nombre)

Gracias y un saludo,
Oscar



.

Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
29/10/2004 - 01:29 | Informe spam
Supongo que lo que tienes es el nombre del formulario en un string y lo que
quieres es crear una instancia del formulario y mostrarla. Esto lo puedes
hacer usando las clases Type y Activator para crear la instancia del
formulario. Por ejemplo:

Sub Mostrar(ByVal formulario As String)

' Obtengo el tipo a partir del nombre de la clase
Dim t As Type = Type.GetType(formulario, True, True)

' Es un formulario?
If t.IsSubclassOf(GetType(Form)) Then

Dim f As Form

' Creo una instancia del formulario
f = DirectCast(Activator.CreateInstance(t), Form)

' Muestro el formulario
f.Show()

Else

Throw New ArgumentException("La clase no es un formulario.")

End If

End Sub

Para llamarlo le pasas el nombre incluyendo el namespace (si esta en otro
ensamblado deberas poner el nombre completo):

Mostrar("MiNamespace.MiFormulario")

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#3 Oscar
29/10/2004 - 08:48 | Informe spam
Gracias, quería pasarle el parámetro del formulario como un form, pero así también me vale, incluso
mejor, creo.

Saludos,

"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el mensaje
news:%
Supongo que lo que tienes es el nombre del formulario en un string y lo que
quieres es crear una instancia del formulario y mostrarla. Esto lo puedes
hacer usando las clases Type y Activator para crear la instancia del
formulario. Por ejemplo:

Sub Mostrar(ByVal formulario As String)

' Obtengo el tipo a partir del nombre de la clase
Dim t As Type = Type.GetType(formulario, True, True)

' Es un formulario?
If t.IsSubclassOf(GetType(Form)) Then

Dim f As Form

' Creo una instancia del formulario
f = DirectCast(Activator.CreateInstance(t), Form)

' Muestro el formulario
f.Show()

Else

Throw New ArgumentException("La clase no es un formulario.")

End If

End Sub

Para llamarlo le pasas el nombre incluyendo el namespace (si esta en otro
ensamblado deberas poner el nombre completo):

Mostrar("MiNamespace.MiFormulario")

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



Respuesta Responder a este mensaje
#4 Oscar
30/10/2004 - 13:22 | Informe spam
Hola Eduardo,

Lo he implementado como me dijiste, y funciona perfectamente, solo que me muestra todo el rato un
error. Para mostrar los formularios, no utilizo el .Show, sino con un procedimiento público que
tiene el propio formulario al que llamo Mostrar, allí después de hacer unas cuantas cosas es cuando
hago el Me.Show.

Bueno, el error que me muestra es precisamente esa línea: MiForm.Mostrar

Sub MostrarForm(ByVal Formulario As String, ByVal Clave As Long, ByVal Caption As String)
Dim Tipo As Type = Type.GetType(Formulario, True, True)
Dim MiForm As Form = DirectCast(Activator.CreateInstance(Tipo), Form)

If ColeccionForms.ContainsKey(Clave) Then
MiForm = ColeccionForms.Item(Clave)
MiForm.WindowState = FormWindowState.Normal
MiForm.BringToFront()
Else
MiForm.Text = Caption
MiForm.Tag = Clave
MiForm.Mostrar() --> Esto me lo marca como un error, y es lógico
pues no
es un miembro de
Windows.System.Forms.Form, sino
del formulario que quiero abrir...
(la cadena Formulario)
End If

MiForm.Dispose()
End Sub

Al ejecutar, me hace la pregunta "se han encontrado errores, ¿desea continuar?" si le digo que sí,
se ejecuta con total normalidad...

La pregunta es: Puedo hacer algo para que no marque el error??

Gracias de nuevo, y saludos,
Oscar


"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el mensaje
news:%
Supongo que lo que tienes es el nombre del formulario en un string y lo que
quieres es crear una instancia del formulario y mostrarla. Esto lo puedes
hacer usando las clases Type y Activator para crear la instancia del
formulario. Por ejemplo:

Sub Mostrar(ByVal formulario As String)

' Obtengo el tipo a partir del nombre de la clase
Dim t As Type = Type.GetType(formulario, True, True)

' Es un formulario?
If t.IsSubclassOf(GetType(Form)) Then

Dim f As Form

' Creo una instancia del formulario
f = DirectCast(Activator.CreateInstance(t), Form)

' Muestro el formulario
f.Show()

Else

Throw New ArgumentException("La clase no es un formulario.")

End If

End Sub

Para llamarlo le pasas el nombre incluyendo el namespace (si esta en otro
ensamblado deberas poner el nombre completo):

Mostrar("MiNamespace.MiFormulario")

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



Respuesta Responder a este mensaje
#5 Oscar
30/10/2004 - 14:57 | Informe spam
Rectifico, no funciona perfectamente, si le digo que continúe con la ejecución a pesar del error, me
hace cosas muy muy raras, como por ejemplo: había puesto un msgbox en un procedimiento para probar
una cosa, pues lo he quitado, no está por ninguna parte en el código del proyecto y sigue
mostrándolo. Claro, he eliminado el sub y ahora si funciona bien...

Por eso al principio mi idea era pasarle como parámetro el mismo form que quiero abrir, y no un
string con el nombre del form...

Qué puedo hacer?

Gracias por todo y un saludo
Oscar


"Oscar" <veletapgARROBAwanadooPUNTOcom> escribió en el mensaje
news:%
Hola Eduardo,

Lo he implementado como me dijiste, y funciona perfectamente, solo que me muestra todo el rato un
error. Para mostrar los formularios, no utilizo el .Show, sino con un procedimiento público que
tiene el propio formulario al que llamo Mostrar, allí después de hacer unas cuantas cosas es


cuando
hago el Me.Show.

Bueno, el error que me muestra es precisamente esa línea: MiForm.Mostrar

Sub MostrarForm(ByVal Formulario As String, ByVal Clave As Long, ByVal Caption As String)
Dim Tipo As Type = Type.GetType(Formulario, True, True)
Dim MiForm As Form = DirectCast(Activator.CreateInstance(Tipo), Form)

If ColeccionForms.ContainsKey(Clave) Then
MiForm = ColeccionForms.Item(Clave)
MiForm.WindowState = FormWindowState.Normal
MiForm.BringToFront()
Else
MiForm.Text = Caption
MiForm.Tag = Clave
MiForm.Mostrar() --> Esto me lo marca como un error, y es lógico
pues no
es un miembro de
Windows.System.Forms.Form, sino
del formulario que quiero abrir...
(la cadena Formulario)
End If

MiForm.Dispose()
End Sub

Al ejecutar, me hace la pregunta "se han encontrado errores, ¿desea continuar?" si le digo que sí,
se ejecuta con total normalidad...

La pregunta es: Puedo hacer algo para que no marque el error??

Gracias de nuevo, y saludos,
Oscar


"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el mensaje
news:%
> Supongo que lo que tienes es el nombre del formulario en un string y lo que
> quieres es crear una instancia del formulario y mostrarla. Esto lo puedes
> hacer usando las clases Type y Activator para crear la instancia del
> formulario. Por ejemplo:
>
> Sub Mostrar(ByVal formulario As String)
>
> ' Obtengo el tipo a partir del nombre de la clase
> Dim t As Type = Type.GetType(formulario, True, True)
>
> ' Es un formulario?
> If t.IsSubclassOf(GetType(Form)) Then
>
> Dim f As Form
>
> ' Creo una instancia del formulario
> f = DirectCast(Activator.CreateInstance(t), Form)
>
> ' Muestro el formulario
> f.Show()
>
> Else
>
> Throw New ArgumentException("La clase no es un formulario.")
>
> End If
>
> End Sub
>
> Para llamarlo le pasas el nombre incluyendo el namespace (si esta en otro
> ensamblado deberas poner el nombre completo):
>
> Mostrar("MiNamespace.MiFormulario")
>
> Eduardo A. Morcillo [MS MVP VB]
> http://www.mvps.org/emorcillo
>
>
>




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