Memorizzare una variabile per richiamarla in un secondo form

martedì 08 giugno 2010 - 12.29

86Marco Profilo | Expert

Salve avrei la necessità di riportarmi il valore di una textbox del Form1 all'interno di una textbox in Form2.
Come posso fare?
E' importante grazie!!:)

AntCiar Profilo | Expert

Ciao.

Se questo valore e' vitale, allora fai l'override del costruttore della Form2 prevedendo il passaggio della stinga.

Nel caso in cui non è vitale, metti nella Form2 una property di tipo stringa e gli passi il valore.

Ciao
Cristian Barca

86Marco Profilo | Expert

Ehmmmm :) non è che saresti cosi gentile da postarmi un esempio pratico?
Grazie

AntCiar Profilo | Expert

ciao.

Allora puoi fare in questo modo:

Esempio 1 - Override del costruttore.

public Form2: Form

public Form2()
{
}

public Form2(string Testo)
{
InizializeComponent();

.... qui utilizzi il valore passato (variabile Testo)
}

nella tua form1 poi scrivi:

Form2 f2 = new Form2(this.TextBox1.Text);
f2.Show();


Esempio 2 : Property

codice da scrivere in Form2:

public string TestoPassato
{
set
{

in questo punto utilizza il valore passato. la variabile contente il testo = value

}
}

in form1 scrivi:

Form2 f2 = new Form2();
f2.TestoPassato = this.textBox1.Text
f2.Show()


Questo è tutto. Ora scegli tu quale usare.

PS: il codice è scritto in C# perchè tu non mi hai specificato nessun linguaggio. Nel caso in cui ti serve in VB Net, in rete ci sono tool di conversione codice.

Ciao ciao

Cristian Barca

86Marco Profilo | Expert

Ok Grazie mille.
Proverò.
Per la cronaca il mio linguaggio era VB.NET

86Marco Profilo | Expert

Ciao devi perdonarmi ma nn sono un grande esperto!
Ho problemi con la produzione del codice in VB :(

AntCiar Profilo | Expert

alloa quale strada vuoi usare?
Cristian Barca

86Marco Profilo | Expert

tecnicamente non capisco che differenza passa tra la prima e la seconda! :)

AntCiar Profilo | Expert

E' solo una questione di uniformità di progettazione.

Ti posto allora il codice in VB Net per la seconda procedura.

Nella Form2 scrivi

Public WriteOnly Property TestoPassato() As String
Set(ByVal value As String)
usa Value per accedere al valore passato.
End Set
End Property


Nella form1 scrivi

Dim f2 As Form2 = new Form2()
f2.TestoPassato = ..........
f2.Show()

Cristian Barca

86Marco Profilo | Expert

Ok perfetto.
Grazie mille Cristian per la pazienza :)

AntCiar Profilo | Expert

Ciao.

vedi che ho appena aggiornato il post perchè avevo dimenticato una cosa.

Dopo per correttezza delle regole del forum, chiudi questo post accettando una risposta.

Ciao
Cristian Barca

alsatan Profilo | Newbie

Scusa ma più semplicemente... Se il form2 lo apri ad un evento del form1 (es bottone) se all apertura del form2 non chiudi il form1 basta che nell evento LOAD del form2 metti qualcosa del tipo:
Me.textbox1.text = Form1.textboxt1.text

se invece il form1 non e' più aperto, ma lo chiudi puoi creare delle variabili globali accessibili da tutto il progetto , per fare questo basta che crei un modulo dove inizializzi una variabile
es. Public x as string
così puoi assegnare ad x il valore della textbox nel form1 e poi richiamarla nel form2...

AntCiar Profilo | Expert

ciao.

>Scusa ma più semplicemente... Se il form2 lo apri ad un evento
>del form1 (es bottone) se all apertura del form2 non chiudi il
>form1 basta che nell evento LOAD del form2 metti qualcosa del
>tipo:
>Me.textbox1.text = Form1.textboxt1.text
>

Il tuo modo di programmare proviene dal VBA di Access. se vuoi implementare la stessa cosa in NET puoi scordartela perchè non funziona.
Poi analizziamo quello scritto nel Form2:

Me.textbox1.text = Form1.textboxt1.text

se scrivi una cosa del genere il compilatore non ti farà nemmeno compilare perchè la variabile Form1 non è dichiarata ne valorizzata.
Quindi se vuoi utilizzare la tua riga di codice, nella form2 devi dichiararti una variabile di tipo Form1, creare una property per valorizzarla e poi dalla Form1 passi se stessa. Questo equivale a fare quello che ho scritto io, con la differenza che io implemento il passaggio di una stringa (X quantità di memoria) e non una intera form (XXXXXXX quantità di memoria). E' come dire "mi passi una fetta di pane? E tu mi porti l'intero Ipermercato".

Mi correggo. Il compilatore ti fa compilare e riesce ad accedere all'oggetto, ma il tutto rimane in gioco fino a che la Form1 'vive'. Questo retaggio del VB da una parte è comodo ma dall'altra potrebbe causarti un sacco di problemi.


"La memoria 'costa'"

>se invece il form1 non e' più aperto, ma lo chiudi puoi creare
>delle variabili globali accessibili da tutto il progetto , per
>fare questo basta che crei un modulo dove inizializzi una variabile
>es. Public x as string
>così puoi assegnare ad x il valore della textbox nel form1 e
>poi richiamarla nel form2...
>

Questo è un modo di programmare scorretto e incomprensibile. A funzionare funziona (questo secondo metodo). Se alla tua Form devi passare dei parametri, inserisci le property e le variabili nella tua Form e non sparpagliate dentro il codice. Così diventa ingestibile.

Cristian Barca

alsatan Profilo | Newbie

Spiegazioni esaurienti e precise :)
le mie non volevano infatti essere delle critiche alla tua soluzione, io sono un niubbo che "riesce" a far girare un codice ad "intuito" leggendo tanti forum e soluzioni, ma so che non e' codice ottimizzato e prima o poi mi creerà dei problemi, spiegazioni come la tua mi servono per capire come andrebbe fatto.. Diciamo che per esigenze personali ho fretta di finire un software che sto progettando, ma poi lo riscriverò ottimizzando tutto e studiando il più possibile , preparati a darmi tante caziate come questa (-:

Grazie :-)
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