Newsgroup: it.comp.lang.visual-basic
Titolo: Unload di tutta la matrice di form

In un progetto, ho creato una matrice di Form uguali (ma con dati diversi) a
cascata con il codice
Set FrmMed(n) = New FrmMed 'crea il form
Mettiamo che ne abbia chiusi alcuni manualmente (ad es con la X in alto a
dx) e che ora li voglia scaricare tutti, a prescindere dal loro numero.
Come si fa a scricarli senza sapere quali sono ancora caricati?
Avevo tentato con
      Dim n As Form
      For Each n In FrmMed(n) 'per ogni elem.individuato nell'insieme degli
elem.della Matrice
          Unload FrmMed(n)
      Next n 'itera su tutti gli elementi esistenti
Ma non va...
Grazie!
Giorgio

 ha scritto nel messaggio
news:T2SJ8.109540$zW3.1...@news1.tin.it...

       Dim n As Form
       For Each n In FrmMed     'per ogni elem.individuato nell'insieme
degli elem.della Matrice
           Unload n


 ha scritto nel messaggio
news:T2SJ8.109540$zW3.1...@news1.tin.it...

prova cosi':
Dim n As Form
  For Each n In VB.Forms
    Unload n
  Next
Ciao
Beppe

            Unload n
Non va; mi dice "Tipo non corrispondente".
Ed n risulta essere  =Nothing.
Ma questo codice dove lo devo mettere? Io l'ho messo nel Form stesso da cui
ho lanciato il caricamento della matrice.
Mi sà che non va bene...
Giorgio

 ho lanciato il caricamento della matrice.
Le cancellazioni degli elementi di una lista si fanno così:
For i = 0 to List.Count
    Remove List(0)
Next i
Il codice ovviamente va adattato al tipo di oggetto in esame.
Non si può cancellare man mano gli elementi perchè mentre tu sali, la lista
scende e a metà si incacchia perchè non trova più niente da togliere.
Ciao

       Next n 'itera su tutti gli elementi esistenti
Dim n
For Each n In FrmMed
 Unload n
Next
ciao


se però vuoi proprio scaricarli dalla memoria dovrai aggiungere un secondo
ciclo
Dim n
For n = 0 To UBound(FrmMed)
 Set FrmMed(n) = Nothing
Next
il primo ci vuole cmq altrimenti non si chiudono
ciao

 escribió en el mensaje
news:T2SJ8.109540$zW3.1...@news1.tin.it...

Ciao quello che io penso che se e vero che ogni formulario aperto viene
caricato in forma automatica nella collezione forms se interagisco con la
collezione Forms chiamando il comando Unload per ogni formulario presente
nella collezione posso chiuderlo anche un formlurario dichiarato dentro una
matrice
Quindi  credo che con un semplice ciclo dentro tale collezione puoi chiudere
tutto
Private Sub cmdChiudi_Click()
Dim f As Form
For Each f In Forms
Unload f
Next
pero se tale comando lo crei nel primo form al caricare dinamicamente i
forms, riporti sia il controllo che il codice
quindi ti conviene nel momento di aprire il form dinamico nascodere il il
cmdChiudi per evitare di chiudere tutti i formaulari da un formulario
dinamico.
Private Sub cmdCrea_Click()
Dim f(5) As Form
Dim x As Integer
For x = 0 To UBound(f)
Set f(x) = New Form1
f(x).Caption = "Formulario-" & (x + 1) ' Creo la Caption del formulario per
usarla piu tardi
f(x).cmdChiudi .Visible = False '  Nascondo il cmdButton solamente nei
formulari nuovi
f(x).Show
Next
End Sub
Il codice di chiusura pero tiene un incoveniente che chiude tutto quindi
chiude anche l'aplicazione per oviare questo problema  solitamente ricorro
ad un sotterfugio ,forse non proprio perfetto in programmazione (ma chi fa
da se far per tre e moltiplica per tre gli errori) :o) , come gia detto nel
momento che carico i forms questi sono caricati nella collezione Forms tale
collezione come tutte le colezzioni ha la proprieta Count che ritorna il
numero dei forms presenti in essa quindi
mi muovo dentro tale collezione che non e legata ai valori degli indici
della matrice, ma ai formulari visibili o invisibili per cui caricati in
memoria per lo tanto se chiudo uno o due o tre in atrverso (ad es con la X
in alto a dx nel formulario), la proprieta Count si aggiorna automaticamente
mi dara sempre al momento di effetuare la sub sottostante il numero reale
dei formulari caricati in memeoria, quindi se controllo la caption che sia
differente dalla caption del primo formulario chiude tale formulario
Private Sub cmdChiudiFormDinamici_Click()
Dim x As Integer
Dim y As Integer
y = Forms.Count - 1
For x = y To 0 Step -1
If Forms(x).Caption <> "Form1" Then  'Qua controllo che il formulario non
sia il primo form1.caption="Form1"
Unload Forms(x)
End If
Next
End Sub
ed questo e un buon inizio per poi continuare
Ciao L'oriundo con 72 ore e dormite 9  72-9=63 sveglio
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 *** Usenet.com - The #1 Usenet Newsgroup Service on The Planet! ***
 
http://www.usenet.com
Unlimited Download - 19 Seperate Servers - 90,000 groups - Uncensored
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=