Entwickler-Ecke
Basistechnologien - Variablen in Klassenbibliotheken
blutengel - So 12.08.12 10:43
Titel: Variablen in Klassenbibliotheken
Hi,
ich hab da ein Problem. Und zwar habe ich eine Windows Forms Anwendung mit 2 Forms, und dazu noch eine Klassenbibliothek.
In der Klassenbibliothek habe ich mit:
eine Variable deklariert. Von der 2 Form aus kann ich darauf zugreifen und auch Werte in sie hineinspeichern. Sobald ich mir die Werte aber in der Haupform holen will geht das nicht. Der Inhalt ist weg und in der Variablen steht NULL. Was mache ich da falsch, wieso verschwindet der Inhalt wenn ich ihn reingeschrieben habe?
MFG
blutengel
Moderiert von
Christian S.: Topic aus WinForms verschoben am So 12.08.2012 um 12:04
Christian S. - So 12.08.12 11:04
Hallo!
Die Variable steht ja sicherlich noch in irgendeiner Klasse, die Du instanziert hast. Diese Instanz musst Du zwischen den Forms austauschen.
Grüße,
Christian
Palladin007 - So 12.08.12 11:45
In einer Variable vom Typ int steht null?
Das kann nicht sein, hast du vielleicht int? oder einen anderen Typ?
Und wie gibst du die Variable denn weiter?
Das sollte ja eigentlich ganz einfach sein, entweder über den Konstruktor oder über eine Eigenschaft.
blutengel - So 12.08.12 13:50
Sorry eigentlich sollte es heißen:
von meiner 2. Form kann ich ja auch zugreifen, und laut Debugger steht auch das Richtige in der Variablen drin.
hier mal die Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace options { public class einstellungen {
public string port; public int baud;
} } |
Zugänglich machen ich das in beiden Forms mit:
C#-Quelltext
1:
| einstellungen o_einstellungen = new einstellungen(); |
Sobald ich jetzt in einer der Forms z.B.:
C#-Quelltext
1:
| o_einstellungen.baud = 9600; |
schreibe, kann ich darauf zugreifen und der Variablen einen Wert zuweisen.
versuche ich aber auch einer anderen Form den Wert auszulesen steht entweder nichts oder 0 darin.
z.B. so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void button2_Click(object sender, EventArgs e) { MessageBox.Show(Convert.ToString(o_einstellungen.baud));
} |
Th69 - So 12.08.12 14:13
Hallo blutengel,
wenn du in
beiden Forms
C#-Quelltext
1:
| einstellungen o_einstellungen = new einstellungen(); |
verwendest (btw. Klassennamen sollten einen großen Anfangsbuchstaben tragen), so ist ja klar, daß du dann zwei
unterschiedliche Instanzen erzeugst.
So wie Christian und Palladin700 schon geschrieben haben, gebe einfach die Referenz an die andere Klasse weiter. Du kannst dir dafür auch mal meinen (schon oft verlinkten) Artikel
Kommunikation von 2 Forms [
http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html] durchlesen.
Palladin007 - So 12.08.12 14:50
Ich hab mir den Artikel zwar nicht durchgelesen (Schande über mich ^^) aber das Stichwort Eigenschaft dürfte dein Problem ganz einfach lösen.
Zum Thema Referenz an die andere Klasse weiter geben, hier ein Beispiel:
Du überlädst ihn einfach mit dem Parameter von Typ einstellung. Da das ein Referenz-Typ ist, kannst du dann von beiden Forms darauf zugreifen und die Änderung wird immer in beiden aktuell sein.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| class Form2 : Form { private einstellung o_einstellungen;
public Form2(einstellung o_einstellungen) : this() { this.einstellungen = einstellungen; } } |
Oder du verlangst im Konstruktor nur speziell nach der einer Variable vom Typ einer der Eigenschaften von einstellung. int und string sind keine Referenz-Typen, daher wird sich die Änderung nicht in der ursprünglichen Referenz von einstellung aktualisieren, aber wenn das nicht zwingend nötig ist, lasse ich es auch immer.
Diese Möglichkeit sollten für deinen Fall völlig ausreichen.
Ich gebe eine Referenz nur dann an eine zweite Form oder Klasse weiter, wenn ich das auch wirklich brauche.
Wenn das nicht zwingend nötig ist, dann arbeite ich lieber mit Eigenschaften, die ganz speziell das heraus geben, was ich brauche, denn dann kann ich direkt überwachen, was genau mit der Eigenschaft geschieht.
PS: Deinen Artikel schaue ich mir mal an, Th69, was neues zu lernen, schadet nie. ^^
PS²: Hab mir den Artikel jetzt mal durchgelesen und ich muss sagen, es lohnt sich. ^^
blutengel, kannst dir also ruhig die Zeit nehmen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!