Problema al mostrar un formulario por segunda vez

18/01/2005 - 01:03 por Public | Informe spam
Hola. Quiero mostrar un formulario desde otro. Tengo el Form1 que es el
principal y el Form2 que es el que quiero mostrar cuando de un botón del
Form1.

En el Form1 tengo este código:
Option Strict On
Public Class Form1
Inherits System.Windows.Forms.Form
Dim frm As Form2 = New Form2()
Codigo generado por el Diseñador de Windows Forms

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

Y en el Form2 tengo un botón donde he puesto solamente close()

Lo que no quiero es que me saque una ventana cada vez que de al botón del
Form1, solo quiero una sola ventana del Form2.

Ejecuto el programa y doy al botón del Form1. Me muestra el Form2. Cierro el
Form2. Vuelvo a dar al botón del Form1 y me da el siguiente error:

Excepción no controlada del tipo 'System.ObjectDisposedException' en
system.windows.forms.dll

Información adicional: No se puede obtener acceso al objeto denominado
"Form2".

He probado a poner en el Form2 en el evento closing esto:
Me.Hide()
e.Cancel = True
Pero no me parece la solución ocultar el Form2, ya que cuando quiera hacer
un programa de verdad, cosa que me esta pasando. El evento Load del Form2
solo se ejecuta la primera vez, no cada vez que se muestra el formulario.

Lo que necesito es descargar el Form2 y cargarlo cada vez que lo necesite.

Algo tan sencillo como en Visual Basic 6

Form2.show
y el el Form2; Unload Me

Gracias.

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
18/01/2005 - 09:03 | Informe spam
Hola,

puedes poner:

Dim frm As Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
frm = New Form2
frm.Show()
End Sub


Un saludo,

Jorge Serrano Pérez
MVP VB.NET

"Public" wrote:

Hola. Quiero mostrar un formulario desde otro. Tengo el Form1 que es el
principal y el Form2 que es el que quiero mostrar cuando de un botón del
Form1.

En el Form1 tengo este código:
Option Strict On
Public Class Form1
Inherits System.Windows.Forms.Form
Dim frm As Form2 = New Form2()
Codigo generado por el Diseñador de Windows Forms

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

Y en el Form2 tengo un botón donde he puesto solamente close()

Lo que no quiero es que me saque una ventana cada vez que de al botón del
Form1, solo quiero una sola ventana del Form2.

Ejecuto el programa y doy al botón del Form1. Me muestra el Form2. Cierro el
Form2. Vuelvo a dar al botón del Form1 y me da el siguiente error:

Excepción no controlada del tipo 'System.ObjectDisposedException' en
system.windows.forms.dll

Información adicional: No se puede obtener acceso al objeto denominado
"Form2".

He probado a poner en el Form2 en el evento closing esto:
Me.Hide()
e.Cancel = True
Pero no me parece la solución ocultar el Form2, ya que cuando quiera hacer
un programa de verdad, cosa que me esta pasando. El evento Load del Form2
solo se ejecuta la primera vez, no cada vez que se muestra el formulario.

Lo que necesito es descargar el Form2 y cargarlo cada vez que lo necesite.

Algo tan sencillo como en Visual Basic 6

Form2.show
y el el Form2; Unload Me

Gracias.




Respuesta Responder a este mensaje
#2 Public
18/01/2005 - 11:15 | Informe spam
He probado esto que has puesto y el problema que hay es que cada vez que
pulso para que salga el Form2 me saca un nuevo Form2. Yo solo quiero que
salga una sola ventana del Form2.
Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
18/01/2005 - 14:56 | Informe spam
Y asi?

Dim form As Form2

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

If form Is Nothing Or form.IsDisposed Then
form = New Form2
form.Show()
Else
form.Activate()
End If

End Sub

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#4 Jorge Serrano [MVP VB]
18/01/2005 - 15:23 | Informe spam
Hola,

Entonces prueba esto otro como ejemplo:

FORM1

Dim frm As New Form2

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
frm.Val = True
frm.Show()
End Sub



FORM2

Public Val As Boolean

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
If Val Then
'Aquí la rutina o rutinas del evento Load
Val = False
TextBox1.Text = TextBox1.Text & " // "
End If
End Sub

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

Private Sub Form2_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Form2_Load(sender, e)
End Sub


Espero que te sirva.

Un saludo,

Jorge Serrano Pérez
MVP VB.NET


"Public" wrote:

He probado esto que has puesto y el problema que hay es que cada vez que
pulso para que salga el Form2 me saca un nuevo Form2. Yo solo quiero que
salga una sola ventana del Form2.
Respuesta Responder a este mensaje
#5 Jorge Serrano [MVP VB]
18/01/2005 - 15:39 | Informe spam
También serviría... con la salvedad de que creo que lo que quiere Public es
que cuando se lance nuevamente Form2, se ejecute Form_Load nuevamente.

En el código que envías te pasa como a mí en el primer código que envié, que
eso no sucede.


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

Y asi?

Dim form As Form2

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

If form Is Nothing Or form.IsDisposed Then
form = New Form2
form.Show()
Else
form.Activate()
End If

End Sub

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