Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Saber si un formulario esta cargado

1,023 views
Skip to first unread message

Tomás

unread,
May 4, 2004, 12:28:29 PM5/4/04
to
Buenas,

Antes en Vb, cuando hacia un formX.show me mostraba el formulario si no
estaba cargado. Estoy observando que ahora en VB.net, si le pulso 20 veces
al botón que muestra el formulario, lo abre 20 veces ???. ¿Como puedo hacer
para que solo se muestre una vez? Ya se que es una chorrada de pregunta pero
es que no se mucho de .net, aun estoy aprendiendo.

Gracias.

Un Saludo,
Tomás


Lazarus Long

unread,
May 4, 2004, 12:41:59 PM5/4/04
to
De una manera sencilla (hay otras más propias de .NET pero ésta es muy simple), creando ua variable booleana que nos dice si ya se abrió el formulario o todavía no, por ejemplo:

Private abierto As Boolean = False

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim f As New Form2
If abierto = False Then
f.Show()
abierto = True
Else
'lo que quieras
End If
End Sub

Un saludo,


Emilio Pérez Egido
La Robla - León - España
http://www.miliuco.net

Jorge Rivera

unread,
May 4, 2004, 12:46:41 PM5/4/04
to
Buenas,

yo tuve el mismo problema y buscando como hacerlo por
Internet, encontre la siguiente solucion:

1. El procedimiento New de la forma, hacerlo Privado para
que no se pueda crear otra forma fuera del siguiente
entorno

2. Definir las siguientes variables y la funcion:

Public Shared frmDisplay As formX
Public Shared flag As Boolean

Friend Shared Function getDisplayObject() As formX
If flag = False Then
frmDisplay = New frmDisplayPrices(clData)
flag = True

Return frmDisplay
Else
Return frmDisplay
End If
End Function

3. Para mostrar la ventana, solamente se usa:

Dim displayForm As formX
displayForm = formX.getDisplayObject()


Esto lo que hace, es si ya tiene un objeto de la forma
creado (segun la bandera), lo devuelve, y si no lo tiene,
lo crea y luego te lo devuelve

Saludos,

Jorge Rivera


>-----Mensaje original-----

>.
>

maycol_...@hotmail.com

unread,
May 4, 2004, 1:03:21 PM5/4/04
to
Uno de los inconvenientes mas graves en VB6 era que creaba
automaticamente una variable con una hinstancia del mismo
formulario con el mismo nombre, como los formularios son
clases para poder acceder y/o utilizarse deben crearse una
variable haciendo una referencia a una instancia de la
clase.

en .NET la cosa es diferente, ya que no se crean
histancias de cada formulario automaticamente (si es el
formulario principal se crea una nueva histancia, pero no
se le asigna ha ninguna variable), esto parece fastidioso
para algunos de VB6, para mi que ya manejo mucho mas con
objetos me parece la mejor alternativa, ya que puedo
controlar a voluntad las histancias de cada formulario sin
que existan variables ocultas ect.

para utilizar solo una histancia de un forulario, como se
hacia en VB6, debes de declarar (como VB6 te lo ocultaba)
una variable publica en un módulo, que haga referencia a
una nueva histancia del form:

module module1
public hForm1 as new Form1 'en .NET ya no se admiten
los mismos nombres, porque no existe reemplazo entre tipos
diferentes.
end module

asi que cada vez que quieras mostrar el formulario llamalo
por la varible hForm1. Otro Inconveniente que presentan
los de VB6 es que al cerrar el formulario, al intentar
reabrirlo les aparece una exepcion de disponsing, lo que
pasa es que un WindowsForm se libera autoimáticamente al
cerrarse, si no se cancela, claro está. una solucion poco
factible de algunos es colocar en el parametro e.cancel
del evento closing del form = true, efectivamente
funciona, pero cuando quieras cerrar winXP no se cerrará
el sistema ni el programa.

Una solucion factible que encontre, no es cancelar el
cierre del formulario, si no cancelar su libreracion de la
memoria, colocando una variable dentro de la clase del
formulario llamada Cancelar de tipo boolean, dentro de la
region "el generador de window...genero código" ó "código
generado por el dise...Forms" existe un reemplazo del
metodo Disponse de la clase Base, en las primeras lineas
coloco:

friend overridable overrides sub Disponse...
if Cancelar then
me.hide 'lo oculto
exit sub
end if
...
end sub

de esta manera el formulario no se libera de la memoria,
para ello tengo que colocar en el evento closing
Cancelar=true, si no quiero cerrar el form e.cancel=true,
si quiero finalizar windows XP con el programa abierto no
pasa nada y se cierra Windows.

espero que te ayude de algo y si quieres aplicalo a todos
tus forms

PostData: me tengo que ir, regreso mañana al foro ;-)

Maycol Alvarez
Caracas, Venezuela.

Tomás

unread,
May 4, 2004, 1:33:03 PM5/4/04
to
Gracias gracias a todos. Me sirven las tres soluciones ya que así aprendo
mas...

Un Saludo,
Tomás

"Tomás" <tomas...@ESTOdvssl.com> escribió en el mensaje
news:OupVSSfM...@tk2msftngp13.phx.gbl...

0 new messages