Newsgroup: it.comp.lang.visual-basic
Titolo: Impedire la visualizzazione di un form figlio in un form MDI

Ciao a tutti.
La mia situazione e' questa:
Ho un form MDI principale su cui devo visualizzare un form figlio centrato.
Prima di visualizzarlo devo pero' impostare alcune proprieta' personalizzate
del form.
Ho scritto questo codice:
frmStato.Visible = False
frmStato.Min = 1
CentraForm frmStato, MDIFrmMain
frmStato.Visible = True
Il problema e' che prima di apparire centrato nel form principale, si vede
che il form appare nell'angolo in alto a destra, per una frazione di
secondo.
Non e' una cosa simpatica da vedere.
Come mai succede questa cosa?
A me sembra che appena faccio riferimento a frmStato esso viene
visualizzato, anche se l'istruzione e' quella per renderlo invisibile.
C'e' qualche modo per superare il problema?
Grazie a tutti.
Ciao.
Skysurfer

Prova ad usare prima di frmStato.visible:
Load frmStato
Questa esegue la Initialize del form;
in quest'ultima routine metti 
              Me.Visible = false
              CentraForm frmStato, MDIFrmMain
Elimina 'frmStato.visible = false', 
'CentraForm frmStato, MDIFrmMain'
dalla rout chiamante.
lascia, DOPO la 'Load frmStato', frmStato.Min = 1
poi esegui frmStato.show
HTH
Ciao
	Adriano


Grazie per il suggerimento. Pero' il problema persiste.
Ho provato cosi':
Private Sub Form_Initialize()
    MsgBox "sono in initalize 1"
    Me.Visible = False
    MsgBox "sono in initalize 2"
    CentraForm frmStato, MDIFrmMain
End Sub
Tra i 2 messagebox si vede il "lampo" del form che viene visualizzato e poi
nascosto.
Boh.
Ciao.
Skysurfer

Credo di averti dato indicazioni imprecise.
Per evitare la visualizzazione, anche se
solo per pochi secondi, del form, non 
devono esserci riferimenti espliciti 
alle componenti *fisiche* del form stesso.
Cioè non devi impostare i valori di
Height, Width, WindowState etc del form
nè devi riferirti a componenti e controlli
contenuti.
Puoi invece impostare i valori *logici*,
quindi variabili locali al form
Suppongo che in CentraForm vi siano riferimenti
espliciti a top, left, height, width.
Eliminala dall'initialize.
Nella Initialize esegui solo le operazioni
che non fanno riferimenti al form
come oggetto *fisico*.
Scrivere 'Me.Visible = false' è comunque un riferirsi
al form: viene caricato e visualizzato, poi reso
not visible: è questo il lampo che vedi.
Imposta, a design-time la proprietà visible
del form a false.
Al termine della Load la imposti a True.
In questa maniera ti sono consentite operazioni 
*trasparenti* sul form, come la CentraForm.
Per riferirti alle variabili del form, frmStato.Min,
devi comunque anteporre la Load. Al termine di tutto
esegui il metodo Show, che eseguendo Form_Load
renderà visibile il form stesso.
HTH
P.S. Usa la funzione DoEvents, ma non abusarne.
     Io la metterei dopo la Load.
Ciao 
	Adriano


 ha scritto
| Ho un form MDI principale su cui devo visualizzare un form figlio centrato.
| Prima di visualizzarlo devo pero' impostare alcune proprieta' personalizzate
| del form.
| Ho scritto questo codice:
|
| frmStato.Visible = False
| frmStato.Min = 1
| CentraForm frmStato, MDIFrmMain
| frmStato.Visible = True
|
| Il problema e' che prima di apparire centrato nel form principale, si vede
| che il form appare nell'angolo in alto a destra, per una frazione di
| secondo.
Prova cosi' (non chiamare il metodo show nel load del frmStato):
Load frmStato
frmStato.Hide
... fai le tue impostazioni
frmStato.Show