cargar formulario sin mostrar

12/04/2006 - 01:24 por Hugo Gsell | Informe spam
Hola... necesito cargar el fomrulario en memoria... pero sin mostrarlo ..
digamos simulando en vb6:

dim ElForm as MiForm
load ElForm
ElForm.show

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
12/04/2006 - 13:23 | Informe spam
"Hugo Gsell" wrote in message
news:
Hola... necesito cargar el fomrulario en memoria... pero sin mostrarlo ..
digamos simulando en vb6:

dim ElForm as MiForm
load ElForm
ElForm.show



Simplemente haces un New:

Dim elForm as MiForm
elForm = New MiForm()

Con eso queda cargado en memoria y no se muestra.
Respuesta Responder a este mensaje
#2 Leonardo Azpurua
13/04/2006 - 06:27 | Informe spam
"Hugo Gsell" escribió en el mensaje
news:
Hola... necesito cargar el fomrulario en memoria... pero sin mostrarlo ..
digamos simulando en vb6:

dim ElForm as MiForm
load ElForm
ElForm.show



Hola, Hugo:

Ese codigo prouce un error 91 en VB6.

En cualquiera de las versiones de VB, la manera correcta sería:

Dim elForm As MiForm
elForm = New MiForm ' con "Set" delante en VB6

y listo.

En VB6 no era necesario -salvo algun error de implementacion- cargar de
manera explicita los formularios: al referirte a cualquier propiedad o
metodo de cualquiera de sus controles, la carga se realizaba de manera
automatica. Igual, la carga del formulario se realiza antes de mostrarse. La
secuencia f.Load: f.Show es simplemente una manera de colocar codigo
innecesario.

Si el formulario expone datos o funcionalidad independiente de sus
controles, entonces no deberia ser un formulario (al menos no esa
funcionalidad y esos datos).

Salud!
Respuesta Responder a este mensaje
#3 Chochenager
13/04/2006 - 07:31 | Informe spam
Utiliza la propiedad "visible" del formulario
Respuesta Responder a este mensaje
#4 Hugo Gsell
14/04/2006 - 14:10 | Informe spam
El código que pase no produce un error ya que MiForm existe... y lo estoy
usando así en vb6. De todas formas lo necesesitaba por lo siguiente.. el
formulario en su evento load efectuava un serie de "trabajos en la pantalla"
que hacían ver com "secciones cortadas" y sombras al cargarse el
formulario... por ello... primero lo cargaba en memoria y se producia el
evento load donde "dibujaba" y hacía lo que tenia que hacer en la pantalla
(ademas de traer unos datos, etc de uan base de datos) y luego + tarde (no
inmediatamente como lo hice en el ejemplo) lo mostraba con los datos digamos
estables

Hugo A. Gsell
Sgo del Estero
Argentina


"Leonardo Azpurua" <l e o n a r d o (arroba) m v p s (punto) o r g> escribió
en el mensaje news:

"Hugo Gsell" escribió en el mensaje
news:
Hola... necesito cargar el fomrulario en memoria... pero sin mostrarlo ..
digamos simulando en vb6:

dim ElForm as MiForm
load ElForm
ElForm.show



Hola, Hugo:

Ese codigo prouce un error 91 en VB6.

En cualquiera de las versiones de VB, la manera correcta sería:

Dim elForm As MiForm
elForm = New MiForm ' con "Set" delante en VB6

y listo.

En VB6 no era necesario -salvo algun error de implementacion- cargar de
manera explicita los formularios: al referirte a cualquier propiedad o
metodo de cualquiera de sus controles, la carga se realizaba de manera
automatica. Igual, la carga del formulario se realiza antes de mostrarse.
La secuencia f.Load: f.Show es simplemente una manera de colocar codigo
innecesario.

Si el formulario expone datos o funcionalidad independiente de sus
controles, entonces no deberia ser un formulario (al menos no esa
funcionalidad y esos datos).

Salud!


Respuesta Responder a este mensaje
#5 Leonardo Azpurua
14/04/2006 - 15:48 | Informe spam
"Hugo Gsell" escribió en el mensaje
news:
El código que pase no produce un error ya que MiForm existe... y lo estoy
usando así en vb6. De todas formas lo necesesitaba por lo siguiente.. el
formulario en su evento load efectuava un serie de "trabajos en la
pantalla" que hacían ver com "secciones cortadas" y sombras al cargarse el
formulario... por ello... primero lo cargaba en memoria y se producia el
evento load donde "dibujaba" y hacía lo que tenia que hacer en la pantalla
(ademas de traer unos datos, etc de uan base de datos) y luego + tarde (no
inmediatamente como lo hice en el ejemplo) lo mostraba con los datos
digamos estables



Hola, Hugo:

Entiendo que en tu proyecto está definido un tipo de formulario con el
nombre MiForm, igual que en los proyecto "por default" se crea una forma
cuyo tipo es "Form1", y que de cada forma se crea una "instancia implicita"
con un nombre igual al del tipo (permitiendote escribir Form1.Show).

Lo que hace el codigo que citas (y que en mi VB6 no funciona, y que no
deberia funcionar en ningun VB6 "por definicion") es esto:

dim ElForm as MiForm
' Declara una variable como una referencia a una instancia de "miForm"
load ElForm
' Carga el formulario asociado con esa instancia (que en este momento es
NULA)
ElForm.show
' Nunca llega aquí, porque se producjo un error 91 en la linea anterior.

Si tu codigo funciona es porque lo que escribiste y lo que realmente tines
en tu programa es diferente (aunque te empeñes en no verlo):

Dim elForm As New MiForm

o bien

Set elForm = New miForm

antes de ElForm..Show

pero la secuencia de codigo que enviaste *no debe ser reconocida como
valida* por ningun compilador de VB6.

Y la logica sigue estando mal: los formularios deben ejecutar Load antes de
Show. Creo que el problema que describes se resolvería colocando la
propiedad Visible del formulario a False, en tiempo de diseño y/o eliminar
las llamadas a DoEvents que pueda haber dentro del proceso que se ejecuta en
Load.

En VB6 puedes ejecutar codigo anterior al Load, en el evento Initialize (en
ocasiones, los objetos creados en Initialize no estan disponibles
posteriormente), y en VB.NET puedes hacerlo agregando codigo en el
constructor de la clase (la sub New, dentro del bloque de código generado
por el diseñador de Windows Forms, donde se inserta un comentario que dice
que insertes aqui tu propio codigo de inicializacion).

En general, me repugna la idea de forzar un evento (Load miForm), o de
activar un procedimiento de evento mediante codigo (miForm_Load): si algo
debe ser forzado o llamado, lo mas correcto seria colocar esa funcionalidad
en un procedimiento, y llamarlo tanto desde el manejador del evento que lo
requiera como desde el componente externo. Aunque en ocasiones funcione lo
contrario, el acostumbrarse desde el principio a separar forma y
funcionalidad no puede producir mas que buenos resultados, el tomarse
licencias con este principio invariablemente conduce al caos.

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