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
Comunicazione form figlio-padre
sabato 23 ottobre 2004 - 12.23
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Peppe
Profilo
| Newbie
24
messaggi | Data Invio:
sab 23 ott 2004 - 12:23
Ciao a tutti! Come avrete letto dal titolo, io ho creato da una form (supponiamo di chiamarla Form1) un' altra form ( Form2 f = new Form2(); ). Da Form1 ho evidentemente il modo di modificare tutto cio' che voglio di Form2 perche' ne ho il "manico" che e' f. Ma poi, da f, come posso fare a recuperare e SOPRATTUTTO modificare i campi di alcune cose della Form1? C'e' qualche classe di .NET (tipo System.qualcosa) che mi permette di fare cio', oppure e' piu' semplice di come mi immagino? Spero che mi aiuterete a risolvere questo problema.. Grazie a tutti!
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
sab 23 ott 2004 - 17:22
Caro Peppe, il tuo è un problema molto gettonato e credo abbia afflitto tutti gli utenti di .net, all'inizio.
Ci sono diversi modi x risolverlo. Quello che ti consiglio io è di impostare dalle proprietà del progetto un nuovo 'oggetto di avvio', scegliendo la 'sub-main'. Aggiungi un modulo e inserisci dentro di esso una routine, che, guarda caso, chiamerai 'sub-main'. Così facendo sarai libero di essere tu a dichiarare la form1 come pubblica in un modulo (generalmente lo stesso in cui metti la sub main). Tutti i form dichiarati (dichiarati....non necessariamente anche istanziati) pubblici in un modulo, possono essere acceduti da qualunque parte del progetto e quindi il tuo Form2, potrà finalmente vedere la Form1 e modificarne variabili pubbliche e controlli, a meno che di essi tu nn abbia modificato l'impostazione di accessibilità di default, che dovrebbe essere Friend. Per lanciare la form1 in partenza, la passerai come argomento al metodo run di application. Quando la form1 verrà chiusa, l'applicazione verrà chiusa anch'essa. Ci sarebbero tante altre cose da dire, ma credo x ora possa bastare, o farai indigestione. Eccoti il codice da mettere nel modulo. Buon lavoro,
Module Module1
Public F1 As Form1
Public Sub Main()
F1 = New Form1
Windows.Forms.Application.Run(F1)
End Sub
End Module
Peppe
Profilo
| Newbie
24
messaggi | Data Invio:
dom 24 ott 2004 - 00:03
Alex..mi sono perso..ti giuro..Ho provato a vedere tra le proprieta' del progetto se ci fosse questo 'progetto di avvio' ma non ho trovato niente.. AIUTOOOOOOOOOOO!!!! Mi dici in caso passo passo (magari provandolo su .NETtu e scrivendomi proprio i passi che fai) quello che dovrei fare? Ma e' una cosa complicatissima!!! Io non e' che programmi in C# da tanto..anzi..da pochissimo..
Un'ultima cosa. Mi hanno detto pure che potrei fare dalla form figlia una cosa del tipo ((Form1)this.Parent).NomeProprietà = "value"; (dove la proprieta' deve essere dichiarata pubblica nella Form1) ma non mi funziona.. mi da questo errore:
An unhandled exception of type 'System.NullReferenceException' occurred in MyProject.exe
Additional information: Riferimento a un oggetto non impostato su un'istanza di oggetto.
come se l'oggetto che vado a modificare nella form padre non fosse inizializzato..ma invece lo e', eccome!!!!
AIUTOOOO!!
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
dom 24 ott 2004 - 18:49
Porca miseria, Peppe, sono proprio un coglione....nn mi ero accorto che programmi in C# e nn VB !!!
Io penso che il consiglio valga ugualmente, ma il codice potrebbe essere leggermente diverso. Comunqe ti parlavo dell'oggetto di avvio, che riguarda il progetto e non del progetto di avvio, che dovrebbe riguardare la soluzione! Ho creato un progetto fittizio in C# (che comunque nn conosco, sia chiaro!) e ho visto che tra le proprietà del progetto c'è l'oggetto di avvio come in VB e ti ci trovi elencati i nomi delle classi atte a contenere un metodo Main (l'equivalente della sub-main in VB). Presumo che nella sostanza il mio discorso rimanga valido, ma credo sia meglio che un collega esperto di C# lo traduca in maniera acconcia. Io rischio di farti ancora più confusione. Scusa ancora x l'equivoco e buon lavoro!
Peppe
Profilo
| Newbie
24
messaggi | Data Invio:
dom 24 ott 2004 - 19:32
Non preoccuparti Alex,apprezzo lo sforzo che cmq hai fatto.. Allora, io ripropongo il problema: come devo fare per far comunicare la form "figlio" con quella "padre"? Vi prego aiutatemi.. Ho provato in vari modi ma non c'e' proprio verso..non riesco a far comunicare le due form (da figlio a padre ovviamente).. Come avevo scritto prima, ho usato una formula del tipo
((Form1)this.Parent).NomeProprietà = "value"; (con la proprieta' pubblica nella Form1)
ma mi da errore a runtime e non capisco perche'.
Ho provato una soluzione con i delegate..ma mi sa che faccio qualche errore perche' anche se supero la fase di compilazione con successo e a runtime non si pianta, di comunicazione non c'e' traccia.. Chiedo aiuto ad un esperto di C#, magari se mi scrive proprio il codice che dovrei eseguire nella Form1 (padre) e nella Form2 (figlio). Grazie a tutti.
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 !