3.7k Aufrufe
Gefragt in Anwendungen(Java,C++...) von xardasdm Mitglied (113 Punkte)
hey leute,
ich schreibe grade an einem programm, für das ich zwei forms benötige.
jetzt möchte ich einer public int variable in einer klasse aus dem form 1 einen wert zuweisen und diesen später im form 2 auslesen.
laut meinem form 2 hat diese variable immer den wert 0, obwohl ich ihr vorher im form1 einen wert ungleich null zugewiesen habe. ich habe den wert auch im form 1 schon verwendet und er war ungleich 0!
warum kann mein form 2 nicht auf werte in einer klasse zugreifen, die vom form 1 zugewiesen wurden?
wie kann ich meine werte sonst übermitteln?

mfg ferdi

3 Antworten

0 Punkte
Beantwortet von
Hallo,

grundsätzlich sollten public variablen vermieden werden.
Im Fall von Instanzvariablen hält .Net die Properties bereit, die die Variable nach aussen verbergen. Trotzdem ist der von dir beschrieben weg natürlich möglich.
Wie ist die Reihenfolge des Aufrufs. Wird Form2 durch eine Aktion in Form1 aufgerufen?
Ist deine Variable als static deklariert? Ansonsten brauchst du die Instanz von Form1.

Ansonsten ist es nur wichtig, dass der Wert vor dem Auslesen gesetzt wird.
Folgende Version gibt beim Laden von Form2 6 aus.

Form1

public static int Test;
private void Form1_Load(object sender, EventArgs e)
{
Test = 6;
}

private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.Show();
}

Form2
private void Form2_Load(object sender, EventArgs e)
{
MessageBox.Show(Form1.Test.ToString() );
}


Gruß Martin
0 Punkte
Beantwortet von xardasdm Mitglied (113 Punkte)
ja form 2 wird von form 1 aufgerufen, meine variable ist nicht als static deklariert.
danke mit dem kleinen wörtchen static hats funktioniert ;D

wie würdest du es machen wenn nicht über public variablen?

vielen dank
mfg xardasdm
0 Punkte
Beantwortet von
Hallo,

ich vermute du brauchst hier keine static Variable sondern eine ganz normale Instanzvariable (ohne static).
Diese kann entweder über den Konstruktor von Form2 übergeben werden, also

private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2(Test);
f.Show();
}


oder über ein Property in Form2 zugewiesen werden, also


private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.Wert = Test;
f.Show();
}

Informationen über Properties findest du hier
http://msdn.microsoft.com/de-de/library/w86s7x04(v=VS.90).aspx
Da gibt es auch Beispiele. In der Regel sollten keine public Variablen verwendet werden, sondern ausschließlich Properties.
Properties gibt es übrigens auch für Static variablen.

Gruß Martin
...