Klassenübergreifende Zugriffe

Guybrush2003

Mitglied
Hallo,

Sorry für eine wahrscheinlich blöde Frage, aber ich komm hier einfach nicht weiter:

Ich möchte auf eine Variable, die in der 1. Klasse deklariert wurde, in einer 2. Klasse zugreifen und den neuen Wert der 1. Klasse zurückführen. In meinem Beispiel soll es erst einmal um die Übergabe in die 2. Klasse gehen.

Mein Versuch:

Code:
using, namespace, etc ...
 
public class Klasse1 : Form
{
public string Dummy="";
 
...
 
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
Dummy = textBox1.Text;
}
 
private void button1_Click(object sender, System.EventArgs e)
{
Klasse2 frm2 = new Klasse2();
frm2.Show();
}
}
 
public class Klasse2 : Form
 
...
 
public void button1_Click(object sender, System.EventArgs e)
{
Form1 neueKlasse = new Form1();
string Dummy = neueKlasse.Dummy;	 // hier hat Dummy leider immernoch keinen Wert
MessageBox.Show(Dummy);
}
}
 
Zuletzt bearbeitet:
Dummy ist immernoch ""; also leer. Mein Problem ist, daß die Klasse 2 die Variable wohl anerkennt, aber laut Deklarierung oben keinen Wert hat. Der zugewiesene Wert in der Methode "textBox1_TextChanged" wird nicht in Klasse 2 weitergeleitet, obwohl diese Methode aufgerufen wurde.
 
Versuch das Ganze doch mal über ein Button_Click-Ereignis und nicht über ein Text_Changed-Ereignis.
Also anstatt
Code:
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
     Dummy = textBox1.Text;
}
lieber das:
Code:
private void button2_Click(object sender, System.EventArgs e)
{
     Dummy = textBox1.Text;
}

Gruß, Niko
 
Zuletzt bearbeitet:
Hab ich versucht. Geht leider nicht. Ist ja auch nur ein Eventhandler wie der andere. Die Zuweisung funktioniert ja innerhalb der Klasse 1, wenn ich mir zusätzlich Dummy in Klasse 1 anzeigen lasse, klappt das. Nun soll aber Klasse 2 den Wert anzeigen, d.h. die Klasse 2 muß den in Klasse 1 geänderten Wert übernehmen. Das klappt leider nicht.

Das ist natürlich nur ein Beispielproggi hier, ich möchte das Prinzip klassenübergreifende Variablen (auch mit Rückgabe in Klasse 1, wenn Variable in Klasse 2 geändert wurde) verstehen.
 
Hmmm...

Komm' jetzt irgendwie auch nicht drauf, wieso das nicht funktioniert.
Hast du schon mal hier nachgeschaut? Das ist ein recht passables Buch zu C#.
Vielleicht unter verschachtelte Klassen?
Oder mit get und set?

Gruß, Niko

<edit>
Ich glaube 9.4 Erstellungsroutinen wäre das Thema deiner Wahl...
</edit>
 
Zuletzt bearbeitet:
Hi,

dein Code hat einen kleinen Fehler. Undzwar erstellst du in deinem Button_ClickEvent der Klasse2 eine neue Instanz der Klasse1. Anstatt dies zu tun, musst du der Klasse2 eine Referenz auf Klasse1 uebergeben. Das machst du entweder im Konstruktor der Klasse2 oder durch ein Property.
Außerdem wuerde ich das Feld 'frm2' der Klasse1 und 'neueKlasse' der Klasse2 global machen und nicht im ClickEvent.
Wenn's zu unverstaendilch war, melde dich nochmal, dann schreibe ich ein wenig Code.
 
Hallo erhardt,

Ich glaube, genau da liegt mein Problem. Wenn ich eine Instanz der ersten Klasse erstelle, dann ist Dummy wieder leer. Aber wie kann ich eine Referenz auf die erste Klasse übergeben? Kannst du mir diesen Teil des Codes schreiben und sagen, an welche Stelle (welche Ebene) ich in eintragen muß?

Vielen Dank!

MfG

Gerd
 
Hi,

ich wuerde das so machen:
Code:
public class Klasse1 : System.Windows.Forms.Form
{
	private Klasse2 kl2;
	...
	private void Test()
	{
		this.kl2 = new Klasse2(this); // hier uebergeben wir dem konstruktor mit 'this' unsere instanz der 'Klasse1' also sich selber
		this.kl2.ShowDialog();
	}
}

public class Klasse2 : System.Windows.Forms.Form
{
	private Klasse1 kl1; // 'Klasse1' global fuer die ganze klasse verfuegbar machen
	...
	// konstruktor
	public Klasse2(Klasse1 temp)
	{
		this.kl1 = temp; // referenz auf 'Klasse1' erstellen
	}
}
Da wir jetzt jeweils eine Referenz auf die anderen Klassen haben kannst du auch auf deren Member zugreifen. Wenn du direkt auf Controls der referenzierten Klasse zugreifen willst, musst diese erst 'public' setzen.
 
Zurück