Forum: PC-Programmierung C# variablen übergeben


von Unbekannt84 (Gast)


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!

von Unbekannt84 (Gast)


Lesenswert?

Das Wichtigste vergessen.

C#
Visual Studio 2010

von Stefan B. (Gast)


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

von Unbekannt84 (Gast)


Lesenswert?

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

hatte ich vorher so, ging aber auch nicht!

von Unbekannt84 (Gast)


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")

von Ralf (Gast)


Lesenswert?

Guckste ma hier:
http://www.mycsharp.de/wbb2/thread.php?threadid=5960

Beachte die weiteren, verlinkten Beiträge. Das wird dir sicherlich 
helfen :)

Ralf

von Unbekannt84 (Gast)


Lesenswert?

>Guckste ma hier:
>http://www.mycsharp.de/wbb2/thread.php?threadid=5960

kenn ich schon, hat aber wenig geholfen. Trotzdem Danke!

von Karl H. (kbuchegg)


Lesenswert?

Unbekannt84 schrieb:

> ergebnis:
> Nr_of_Samples bleibt leer ("0")

Woher weißt du das?

von Stefan B. (Gast)


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?

von Arc N. (arc)


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."

von Stefan B. (Gast)


Lesenswert?

Ach verdammt, hatte überlesen dass es um VS2010 geht...

Aber trotzdem sollte der TE mal genau debuggen, um zu sehen wo es 
eigentlich hängt...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.