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

#6 Eduardo A. Morcillo [MS MVP VB]
30/10/2004 - 17:27 | 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...



Eso es porque le hace continuar pese al error. Si continuas, lo que estas
haciendo es ejecutar la version anterior ya que la nueva no se compilo por
el error.

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...



¿Que es lo que le quieres pasar exactamente? ¿Una instancia del formulario o
el nombre de la clase? Yo interprete en tu mensaje original (y por el
asunto) que lo que querias era pasar la clase y no una instancia.

El problema que tienes con Mostrar es como dices que no es un metodo de Form
sino de tu formulario. Tienes dos soluciones, definir Mostrar en una
interface e implementarla en tus formularios o usar Reflection para llamar
al metodo. Yo prefiero la primera ya que tienes la ventaja hacer la llamada
directamente al metodo. Por ejemplo:

Interface IMostrar
Sub Mostrar()
End Interface

La implementas en el formulario:

Public Class Form1
Inherits System.Windows.Forms.Form
Implements IMostrar

Public Sub Mostrar() Implements IMostrar.Mostrar
Me.Show()
End Sub

'...

End Class

Y en MostrarFormulario la llamarias asi:

' Chequeo si el formulario implementa IMostrar
If TypeOf MiForm Is IMostrar Then
' Llamo a Mostrar
DirectCast(MiForm, IMostrar).Mostrar()
Else
' El formulario no implementa IMostrar
' entonces uso Show
MiForm.Show()
End If

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#7 Oscar
31/10/2004 - 14:19 | Informe spam
Gracias!

"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el mensaje
news:
> 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...

Eso es porque le hace continuar pese al error. Si continuas, lo que estas
haciendo es ejecutar la version anterior ya que la nueva no se compilo por
el error.

> 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...

¿Que es lo que le quieres pasar exactamente? ¿Una instancia del formulario o
el nombre de la clase? Yo interprete en tu mensaje original (y por el
asunto) que lo que querias era pasar la clase y no una instancia.

El problema que tienes con Mostrar es como dices que no es un metodo de Form
sino de tu formulario. Tienes dos soluciones, definir Mostrar en una
interface e implementarla en tus formularios o usar Reflection para llamar
al metodo. Yo prefiero la primera ya que tienes la ventaja hacer la llamada
directamente al metodo. Por ejemplo:

Interface IMostrar
Sub Mostrar()
End Interface

La implementas en el formulario:

Public Class Form1
Inherits System.Windows.Forms.Form
Implements IMostrar

Public Sub Mostrar() Implements IMostrar.Mostrar
Me.Show()
End Sub

'...

End Class

Y en MostrarFormulario la llamarias asi:

' Chequeo si el formulario implementa IMostrar
If TypeOf MiForm Is IMostrar Then
' Llamo a Mostrar
DirectCast(MiForm, IMostrar).Mostrar()
Else
' El formulario no implementa IMostrar
' entonces uso Show
MiForm.Show()
End If

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



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