Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Form e chiamate a Funzioni di altri Form
mercoledì 30 agosto 2006 - 13.32
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
giulyxiano
Profilo
| Junior Member
163
messaggi | Data Invio:
mer 30 ago 2006 - 13:32
Da premettere che uso VS 2003
Ho realizzato un'applicazione MDI con la quale faccio molte cose. Aperta una Form ho la necessità di aprire un Form più piccolo con cui faccio delle cose che però sono collegate al Form precedentemente aperto ed ancora aperto. Quando chiudo questo piccolo Form devo in pratica aggiornare i valori di un combo che mi provengono da un database perciò mi servirebbe richiamare un metodo del Form grande dal Form pccolo, come faccio? Grazie Giuliano.
Greco Giuliano
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 30 ago 2006 - 14:16
Hai molte vie per aggirare il problema:
1) Rendere accessibile il form grande dichiarandolo pubblico in un modulo
2) Passare un riferimento del form grande al form piccolo, tipicamente in un overload del costruttore, ma non necessariamente.
3) Assegnare ad una variabile globale di tipo Form, un riferimento al form grande, prima di istanziare il form piccolo, che potrà usare tale variabile per accedere al form grande
4) Usare il metodo showdialog per lanciare il form piccolo e dopo il ritorno al codice del form grande, leggerne i valori, aggiornare il controllo che hai sul form grande e poi distruggere il form piccolo, come mostrato sotto:
Dim Fp as new Fpiccolo
'Lanci FP e ci lavori sopra. Alla fine dovrai settare la sua proprietà DialogResult, per esempio a DialogResultOK
provocandone la chiusura, che però è una chiusura un po' diversa da quella dei form aperti col metodo 'Show'
Fp.showdialog()
' Qui leggi i valori in Fp e aggiorni il controllo.
MiaProceduraCheAggiornaDati() 'Nota che a questo punto puoi ancora accedere ai controlli di FP ( es: Fp.Textbox1) e leggerne il contenuto
' Poi distruggi l'oggetto
Fp.dispose
Fp=nothing
'Ora non puoi più accedere a FP
giulyxiano
Profilo
| Junior Member
163
messaggi | Data Invio:
mer 30 ago 2006 - 14:27
La cosa mi sembra un po' contorta......
Io ne form grande lavvoro con un database.....con il form piccolo agisco sempre sullo stesso database quindi quando chido il form piccolo premendo chiudi vorrei che nel form grande i dati venissero aggiornati e la cosa sarebbe risolta se io otessi chiamare il metodo caicaQesiti del Form Grande..capito?
Greco Giuliano
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 30 ago 2006 - 16:40
Forse mi sfugge qualcosa, perchè, se capisco bene, ti dovrebbe bastare chiamare il metodo che dici tu, dopo la chiusura del form piccolo, ma evidentemente non afferro il problema, anche perchè la soluzione proposta del delegate mi induce veramente a pensare che qualcosa sto perdendo del tuo ragionamento. Se le soluzioni che ti ho proposto non sono applicabili, per qualche motivo che non capisco, non mi resta che sperare che l'amico Coach possa aiutarti. Seguirò volentieri gli sviluppi, per vedere dove mi ero smarrito! Buon lavoro.
giulyxiano
Profilo
| Junior Member
163
messaggi | Data Invio:
mer 30 ago 2006 - 17:19
Vi spiego.......
Io quando devo chiamare un metodo di un'altro Form faccio così:
1) Il metodo lo rendo pubblico
2) Dall'altro Form creo un'istanza del Form e faccio:
Dim Form1 As FormMio
Form1.Metodo()
La cosa però che non capisco è se io creo una nuova istanza del Form non mi va ad aprire il Form_load?
Se fa così a me non sta bene perchè andrà a caricare cose che non voglio...
Poi io vorrei che le cose si aggiornassero quando chiudo il form piccolo(o di dialogo)
non so se mi sono spiegato....
Greco Giuliano
xe
Profilo
| Newbie
29
messaggi | Data Invio:
mer 22 ago 2007 - 18:41
Se apri al momento di mostrare l'istanza del form piccolo utilizzi Show o ShowDialog passandogli come Owner l'istanza del tuo form grande, lo renderai accessibile al figlio.
Altra cosa....l'evento Load viene scatenato al caricamento della form non ogni volta che essa viene visualizzata.
butta un occhio all'ebento showen
oppure potresti lasciare il form piccolo come semplice dialogo dialogo e recuperarne i dati inseriti dall'utente alla sua chiusura.
Dim a as new FormPiccolo '//Creo una nuova istanza azzerare la form...
'//ma volendo potresti usare semrpe la stessa e farne ripopolare i campi
'// MiaForm.ProprietàVariabileEsempio = "TEST"
'// ......etc etc etc
'//Prosegue con [a]
If a.ShowDialog(Me)=DialogResult.Ok Then '//Verifica che l'interazione non sia stata annullata
'//l'istanza del dialogo è ancora accessibile
'//Recupero i dati....
_VariabileEsempio = a.ProprietàVariabileEsempio
Else
'//Dialogo annullato
End if
a.dispose
Deligere oportet quem velis diligere
Torna su
Stanze Forum
Elenco Threads
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 !