Nascondo un form con Frm.Hide, come faccio a visualizzarlo nuovamente senza ricaricarlo da zero ovviamente?
Ciao
Nascondo un form con Frm.Hide, come faccio a visualizzarlo nuovamente senza ricaricarlo da zero ovviamente?
Ciao
grazie,provo ad esporre meglio il problema.
Ho un bottone nel form principale nel quale c'è:
così la prima volta che premo mi si apre il form. Quando clicco sul "Chiudi" del form faccio OpzioniTesto.hidecodice:Dim OpzioniTesto As New FrmText OpzioniTesto.ShowDialog()
Se clicco un'altra volta sul bottone del form principale è ovvio che mi ricarica un nuovo form, perché c'è:
Come faccio a dirgli che la seconda volta che faccio click non mi deve aprire un nuovo form ma deve visualizzare quello nascosto?codice:Dim OpzioniTesto As New FrmText OpzioniTesto.ShowDialog()
Spero di essermi spiegato.![]()
Invece di utilizzare una variabile locale che contenga ogni volta il riferimento ad una nuova istanza appena creata del form secondario, rendi la variabile un campo della classe del form principale e nella routine in cui il form secondario deve essere visualizzato scrivi qualcosa di simile al seguente codice:Originariamente inviato da mardok30
Come faccio a dirgli che la seconda volta che faccio click non mi deve aprire un nuovo form ma deve visualizzare quello nascosto?
In questo modo, quando la variabile viene inizializzata la prima volta con un riferimento al form secondario, tale riferimento permane e non viene creata una nuova istanza poichè le istruzioni dell'If...Then non vengono eseguite.codice:If OpzioniTesto = Nothing Then OpzioniTesto = New FrmText End If OpzioniTesto.ShowDialog()
Prendi il codice come puro esempio poichè non programmo abitualmente con VB.NET ma uso Delphi.NET pertanto non sono certo che sia corretto dal punto di vista sintattico, ma dovrebbe essere sufficiente a rendere l'idea.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
E' solo una delle tante soluzioni. Ad esempio, se non ricordo male il metodo ShowDialog visualizza un form "modale", che non consente di proseguire fino a quando tale form non viene chiuso.Originariamente inviato da cassano
confermo è cosi![]()
In questo caso, forse conviene davvero usare un costrutto Try...Finally e garantire la distruzione della finestra di dialogo ricreandola ogni volta ed evitando di occupare inutilmente memoria.
Qualcosa di simile a quanto segue:
Anche questo codice va "preso con le molle" dato che non l'ho verificato.codice:Dim MyForm As New MyFormClass Try MyForm.ShowDialog() Finally MyForm.Dispose() End
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Grazie.
Si ricordi bene.Ad esempio, se non ricordo male il metodo ShowDialog visualizza un form "modale", che non consente di proseguire fino a quando tale form non viene chiuso.
Devo essere sincero non è che ho capito proprio bene cosa significa, pardon :-)rendi la variabile un campo della classe del form principale
Ho risolto però in altro modo:
Dim OpzioniTesto As New FrmText l'ho messo tra le dichiarazioni a livello di form
poi nel bottone ho messo
OpzioniTesto.ShowDialog()
Non so se è la soluzione migliore ma al momento sono riuscito a fare solo questo.
e grazie ancora
Uhm... beh sì, in effetti era più semplice ancora.Originariamente inviato da mardok30
Ho risolto però in altro modo [...]
In sostanza, quando crei un'istanza del form principale, viene creata un'istanza del form secondario e il suo riferimento viene assegnato alla variabile privata che è campo del form principale; in seguito, ti basta chiamare il metodo del form secondario ShowDialog per mostrarlo.
Direi che con la tua e le nostre soluzioni abbiano snocciolato l'argomento, no?![]()
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
direi proprio di siDirei che con la tua e le nostre soluzioni abbiano snocciolato l'argomento, no?
Non credo venga fatto in automatico quindi per sicurezza ho messo anche un:
OpzioniTesto.Dispose()
quando chiudo il form principale.![]()