Oppure

Loading
30/06/10 6:09
piter123
Salve ho un progetto con una form mdi di partenza, all'interno ci sono una serie di form child le quali contengono una cinquantina di oggetti vari tra label, text, combo, e msflexgrid disposti in ordine vario.
Tramite una routine all'avvio della MDI inizializzo le posizione (top,left,height e width) dei vari oggetti delle form figlie.
Il primo problema che ho è che nonostante che apra le figlie in Hide, piuttosto che le metta in visible=false o enabled=false mi fà vedere passo passo tutti i riposizionamenti delgli oggetti delle form figlie.
Il secondo problema si presenta alla chiusura del form mdi, nel quale nonostante esgua la chiusura unload delle form figlie, nonchè le metta visible=false o enable=false (lo sò che enabled=false non centra nulla ma è stato giusto per provare) mi fà apparire all'interno della form mdi la form figlia così come la mamma l'ha fatta, cioè con tutti gli oggetti alla rinfusa come sono disposti prima della sua inizializzazione.

in vba di excel esiste un comando che è Application.ScreenUpdating = false che nasconde l'effetto della macro fino a che non è terminata, non sò esiste quancosa di simile ?
aaa
30/06/10 6:41
Alfonso
Per il primo problema. Controlla che la Mdi abbia la proprietà AutoShowChildren = False.
Poi potresti settare i controlli delle form figlie prima di mostrare la Mdi.

Per quanto riguarda il secondo problema. Evidentemente durante l'esecuzione del programma le form figlie vengono chiuse prima di chiudere la mdi.
Quando fai un unload nomeform, se nome form è già chiusa si apre (ecco perchè la vedi come è stata disegnata) e quindi si chiude.
Ultima modifica effettuata da Alfonso 30/06/10 6:44
aaa
30/06/10 10:28
piter123
mille grazie, impostando AutoShowChildren = False mi ha risolto sia il problema in avvio che in chiusura, ciao
aaa
30/06/10 11:06
Alfonso
Considera comunque che il secondo problema non lo vedi più ma continua ad esistere.
Ti consiglio di sostituire gli unload nomeform con una semplice routine che scarica solo le form aperte.
Nella form MDI:
Private Sub Form_Unload(Cancel As Integer)
    Dim i As Integer
    While Forms.Count > 1
       i = Forms.Count - 1
       Unload Forms(i)
    Wend
    Set NomeFormMDI = Nothing
End sub
aaa