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
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
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-----
>.
>
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.
Un Saludo,
Tomás
"Tomás" <tomas...@ESTOdvssl.com> escribió en el mensaje
news:OupVSSfM...@tk2msftngp13.phx.gbl...