Come chiudo una Form in VB.NET ?

martedì 08 marzo 2005 - 00.31

max1850 Profilo | Junior Member

Salve!
Ho una domanda da farvi...
Allora, io ho 2 form, Form1 e Form2.
la Form1 è la principale, e tramite un bottone apro la Form2 (in maniera non modale) così:

Dim finestra2 as new Form2
finestra2.Show()

Ora, come chiudo la Form2 sempre da un pulsante situato nella Form1 ?
Grazie.
Max!

AntCiar Profilo | Expert

Ciao,
puoi fare in questo modo: dichiarati un arraylist (pippo) e fai così

private FRM2 as Form2

FRM2 = new form2
if pippo.contains(FRM2) = false
pippo.add(FRM2)
end if
FRM2.show

quando devi chiuderla....
FRM2 = directcast(pippo.item(index),form1)
FRM2.close

Il valore 'index' rappresenta l'indice che ha la form all'interno dell'array.

Cristian

max1850 Profilo | Junior Member

Ciao!
Scusa ma il "Close()" del caro vecchio VB6 non esiste più?

Max

AntCiar Profilo | Expert

si, il comando Close esiste lo stesso solo che in VB6 dovevi passargli anche il tipo di oggetto da chiudere e il nome, in VBNEt il close funziona solo per l'oggetto su cui gli esegui il "Close" sopra

max1850 Profilo | Junior Member

E quindi come la chiudo la form?
Quali sono i comandi giusti?

Ciao
Max

AntCiar Profilo | Expert

ciao,
puoi chiuderla tramite il codice che ti ho postato qualche msg fa. In pseudo codice succede questo:

quando apri la form2, inserisci la stessa in un arrayList
Se apri più occorrenze della stessa Form2, prima di passarla all'arraylist, inserisci un Id alla proprietà Name della Form2

es Form2.name = ID
ID = ID +1
ArrayList.add(Form2)


quando devi chiudere la form2 scorri l'array alla ricerca della Form2 che ha l'indice che a te serve e la chiudi:

es

Dim OBJ as new object
Dim i as integer

Private sub ChiudiForm(Byval CurID as integer)
for i arraylist.count-1 to 0 step -1
if ctype(arraylist.item(i), Form2).name.equals(CurID.tostring)=true
obj = directcast(arraylist.item(i), Form2)
obj.close
arraylist.remove(i)
exit sub
end if
next
end sub

Con il codice che ti ho postato puoi realizzare anche il focus dinamico su N form aperte in modo non modale.Mi spiego meglio: puoi mettere in primo piano una form a scelta tra N form contenporaneamente aperte senza che ne apri un'altra, cosa che genererebbe un duplicato.

Spero di essere stato di aiuto
ciao Cri

max1850 Profilo | Junior Member

OK! Ora devo mettere insieme il tutto e vedrò di farlo!
Molte grazie dell'aiuto! ;)
Ciao
Max!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5