C# variablen übergeben

Gast #1787736
Lesenswert?

Nachdem ich seit 14 Uhr im Netz nach einer Lösung gesucht habe, bin ich 
nun gezwungen hier mein Problem zu posten:

Ich habe eine Windows-Form (Form1) in welcher ich über eine Textbox eine 
Zahl eingebe.
Nach dem Betätigen eines Buttons öffnet sich ein neues Fenster (Form2) 
und Form1 wird ausgeblendet.

In diesem neuen Fester muss ich aber u.a. auf den zuvor eingegebenen 
Wert zugreifen

In meinem Form1 habe ich das wie folgt gemcht:
1
public int Nr_of_Samples;
2
...
3
Form2 frm2 = new Form2();
4
frm2._Nr_of_Samples = Convert.ToUInt32 (TB_Nr_of_Samples.Text);
5
this.Visible = false;
6
frm2.ShowDialog();
7
this.Visible = true;

Form2 schaut dann wie folgt aus:
1
private UInt32 Nr_of_Samples;
2
public UInt32 _Nr_of_Samples { get; set; }
3

4
private void Form2_Load(object sender, System.EventArgs e)
5
{
6
    this.Nr_of_Samples = this._Nr_of_Samples;
7
}

Jetzt sollte mein Wert in Nr_of_Samples stehen.

Hab mehrere Wege probiert, war alles vom Aufbau mit diesem hier 
vergleichbar.
Kann mir mal jemand aufzeigen, wie ich das am besten mache?

Danke schonmal!
Gast #1787779
Lesenswert?

Also, mit
1
public UInt32 _Nr_of_Samples { get; set; }
definierst du eine Eigenschaft (Property) "_Nr_of_Samples".

Aber im Setter und Getter machst du ja nichts, also kommt der 
zugewiesenen Wert nie in deiner Variablen an.

Wenn du anstatt dessen das hier
1
public UInt32 _Nr_of_Samples
2
{
3
    get { return this.Nr_of_Samples; }
4
    set { this.Nr_of_Samples = value; }
5
}
schreibst, sollte es funktionieren.

Und die Zuweisung im Load muss auch noch raus:
1
private void Form2_Load(object sender, System.EventArgs e)
2
{
3
    // this.Nr_of_Samples = this._Nr_of_Samples;
4
}
Denn das ist sinnlos, "_Nr_of_Samples" ist keine Variable, sondern eine 
Property. Und die hat keinen Wert, sondern holt ihn sich bei Bedarf über 
den Getter, und über den Setter wird ein Wert der Variablen zugewiesen.

Das ist ja der Vorteil an Properties.
Wenn du einen Wert nur lesen, aber nicht ändern können willst, lass den 
set-Teil einfach weg.
Oder du machst eine Prüfung, welche Werte erlaubt sein sollen, und bei 
falschen Werten machst du nichts oder wirfst eine Exception.

Im Getter können z.B. auch die Rückgabewerte von privaten 
Memberfunktionen verwendet werden.
Also kannst du auch Properties für Dinge anbieten, die keine eigene 
Membervariable haben.

MfG
Gast #1787807
Lesenswert?

schaut jetzt wie folgt aus:

Form1

public int Nr_of_Samples;
...
Form2 frm2 = new Form2();
frm2._Nr_of_Samples = Convert.ToUInt32 (TB_Nr_of_Samples.Text);
this.Visible = false;
frm2.ShowDialog();
this.Visible = true;

Form2 :

private UInt32 Nr_of_Samples;
public UInt32 _Nr_of_Samples
{
    get { return this.Nr_of_Samples; }
    set { this.Nr_of_Samples = value; }
}


ergebnis:
Nr_of_Samples bleibt leer ("0")
Gast #1787869
Lesenswert?

Hmm seltsam...
Die Zuweisung in Form2_Load hast du entfernt?

Setz dir mal nen Breakpoint auf
Form2 frm2 = new Form2();
und geh ab da per Einzelschritt weiter.

Kommt überhaupt der richtige Wert im Setter von Form2 an?
Wird er richtig in die private Variable übernommen?
Ab wann ist der Wert wieder weg?
#1787926
Lesenswert?

Stefan B. schrieb:
> Also, mit
>
1
public UInt32 _Nr_of_Samples { get; set; }
> definierst du eine Eigenschaft (Property) "_Nr_of_Samples".
>
> Aber im Setter und Getter machst du ja nichts, also kommt der
> zugewiesenen Wert nie in deiner Variablen an.

doch, diese { get; set; } Syntax führt zu einer autom. implementierten 
Eigenschaft
http://msdn.microsoft.com/en-us/library/bb384054.aspx

Die anderen Lösungen des ursprünglichen Problems findet man hier
Beitrag "C# - Anfänger braucht Hilfe beim Umgang mit Klassen --> Zugriff auf Daten"
Beitrag "C#, Wie kann ich Daten zwischen zwei Form's austauschen."

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren