Problema para abrir formulario

23/11/2005 - 19:13 por Lucas | Informe spam
Tengo un problema a la hora de abrir un formulario. El código que suelo
encontrar en internet para este fin es el siguiente:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As_
System.EventArgs) Handles Button1.Click

Dim formulario As New FormNuevo 'creo un objeto de la clase FormNuevo
formulario.Show() ' muestro el formulario haciendo uso del
método show

End sub

Para que al hacer clic en un determinado botón se abra el formulario. Sin
embargo, dado que el nuevo formulario no es modal, se puede volver al
formulario donde se encuentra el botón que permitió abrir el nuevo
formulario. Por lo que puedo abrir varios nuevos formularios con solo hacer
clic, es decir, cada vez que hago clic en el botón, abro un nuevo formulario,
uno tras otro, todos iguales.

Esto se debe a que cada vez que hago clic en el botón, creo un objeto de la
clase FormNuevo. He intentado declarar al nuevo formulario en las
declaraciones generales, pero cada vez que cierro el nuevo formulario e
intento volver a abrirlo me sale un error.

He logrado solucionar este problema haciendo uso del patrón Singleton para
que solo pueda crear una instancia de cada formulario que deseo abrir, pero
me parece que es mucha cosa para una tarea tan simple.

Espero que alguien pueda solucionar el problema que tengo. Gracias

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
23/11/2005 - 19:32 | Informe spam
Hola Lucas,

vamos a ver si el siguiente ejemplo te sirve;

Declara en el Form1 la variable:

Public MiForm As Form2


Además, escribe el siguiente código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
If MiForm Is Nothing Then
MiForm = New Form2
MiForm.MiFormPadre = Me
MiForm.Show()
End If
End Sub


En el segundo formulario, declara la siguiente instrucción:

Public MiFormPadre As Form1


A continuación escribe este código:

Private Sub Form2_Closed(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Closed
MiFormPadre.MiForm = Nothing
End Sub



Espero que te sirva.


Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Lucas" wrote:

Tengo un problema a la hora de abrir un formulario. El código que suelo
encontrar en internet para este fin es el siguiente:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As_
System.EventArgs) Handles Button1.Click

Dim formulario As New FormNuevo 'creo un objeto de la clase FormNuevo
formulario.Show() ' muestro el formulario haciendo uso del
método show

End sub

Para que al hacer clic en un determinado botón se abra el formulario. Sin
embargo, dado que el nuevo formulario no es modal, se puede volver al
formulario donde se encuentra el botón que permitió abrir el nuevo
formulario. Por lo que puedo abrir varios nuevos formularios con solo hacer
clic, es decir, cada vez que hago clic en el botón, abro un nuevo formulario,
uno tras otro, todos iguales.

Esto se debe a que cada vez que hago clic en el botón, creo un objeto de la
clase FormNuevo. He intentado declarar al nuevo formulario en las
declaraciones generales, pero cada vez que cierro el nuevo formulario e
intento volver a abrirlo me sale un error.

He logrado solucionar este problema haciendo uso del patrón Singleton para
que solo pueda crear una instancia de cada formulario que deseo abrir, pero
me parece que es mucha cosa para una tarea tan simple.

Espero que alguien pueda solucionar el problema que tengo. Gracias
Respuesta Responder a este mensaje
#2 Lord Voldemort
23/11/2005 - 19:48 | Informe spam
esto lo saque del laspaginas del Guille. puedes darte una vuelta y
rebuscar.. ahorita mismo no se donde esta exactamente..

basicamente.. usas una funcion en cada formulario.. esta...
'controla que sólo exista una instancia del formulario.
Public Shared Function Instance() As frmFases

If ChildInstance Is Nothing OrElse ChildInstance.IsDisposed = True Then

ChildInstance = New frmFases

End If

ChildInstance.BringToFront()

Return ChildInstance

End Function



pero antes declaras esta variable ChildInstance .. y cambias el Private
Class frmNombre por Public Class frmNombre

Public Class frmFases

'Variable pública para tener una sola instancia del formulario

Private Shared ChildInstance As frmNombre = Nothing



y para llamar el formulario

Private Sub mnuMOrigenLarva_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuMOrigenLarva.Click, mnuWOrigenLarva.Click

Dim frmChildInstance As frmNombre = frmChildInstance.Instance

frmChildInstance.MdiParent = Me

frmChildInstance.Show()

End Sub

cambia frmNombre por el nombre de tu formulario..



si encuentras un metodo mas facil favor me avisas..







"Lucas" wrote in message
news:
Tengo un problema a la hora de abrir un formulario. El código que suelo
encontrar en internet para este fin es el siguiente:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As_
System.EventArgs) Handles Button1.Click

Dim formulario As New FormNuevo 'creo un objeto de la clase FormNuevo
formulario.Show() ' muestro el formulario haciendo uso del
método show

End sub

Para que al hacer clic en un determinado botón se abra el formulario. Sin
embargo, dado que el nuevo formulario no es modal, se puede volver al
formulario donde se encuentra el botón que permitió abrir el nuevo
formulario. Por lo que puedo abrir varios nuevos formularios con solo
hacer
clic, es decir, cada vez que hago clic en el botón, abro un nuevo
formulario,
uno tras otro, todos iguales.

Esto se debe a que cada vez que hago clic en el botón, creo un objeto de
la
clase FormNuevo. He intentado declarar al nuevo formulario en las
declaraciones generales, pero cada vez que cierro el nuevo formulario e
intento volver a abrirlo me sale un error.

He logrado solucionar este problema haciendo uso del patrón Singleton para
que solo pueda crear una instancia de cada formulario que deseo abrir,
pero
me parece que es mucha cosa para una tarea tan simple.

Espero que alguien pueda solucionar el problema que tengo. Gracias
Respuesta Responder a este mensaje
#3 Lucas
24/11/2005 - 01:53 | Informe spam
Muchas gracias por la solución. Gracias por su tiempo.

Noté que ambas soluciones son variantes del uso del patrón de diseño
Singleton, aunque más simplificadas. Otra vez gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida