www.mikrocontroller.net

Forum: PC-Programmierung C# variablen übergeben


Autor: Unbekannt84 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
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 schaut dann wie folgt aus:
private UInt32 Nr_of_Samples;
public UInt32 _Nr_of_Samples { get; set; }

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

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!

Autor: Unbekannt84 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Wichtigste vergessen.

C#
Visual Studio 2010

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, mit
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
public UInt32 _Nr_of_Samples
{
    get { return this.Nr_of_Samples; }
    set { this.Nr_of_Samples = value; }
}
schreibst, sollte es funktionieren.

Und die Zuweisung im Load muss auch noch raus:
private void Form2_Load(object sender, System.EventArgs e)
{
    // this.Nr_of_Samples = this._Nr_of_Samples;
}
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

Autor: Unbekannt84 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Unbekannt84 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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")

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Unbekannt84 (Gast)
Datum:

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

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unbekannt84 schrieb:

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

Woher weißt du das?

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> Also, mit
>
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."

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.