Datenaustausch zwischen Form1 und Form2
-
Da hier immer wieder die Fragen aufkommen wie ein Datenaustausch zwischen Forms funktioniert habe ich hier ein Tutorial.Ist zwar in C# aber lässt sich ja schnell umschreiben.
Und los gehts:
Datenaustausch zwischen Formularen
Immer wieder werden Anfragen gestellt, wie denn Daten von Form1 an Form2 und umgekehrt übergeben werden können. Dies ist zwar ansich ein recht einfaches Problem der OOP, dennoch habe ich mir ein paar Minuten Zeit genommen, um dies anhand eines kurzen Beispiels zu zeigen.
1. Form1 -> Form2
In unserem ersten Beispiel haben wir zwei Formen: Form1 und Form2. Folgende Annahme stellen wir: in Form2 gibt es eine Variable id vom Typ int welche wir mit einem Wert befüllen möchten. Dies soll geschehen, bevor Form2 auch tatsächlich angezeigt wird.
Bevor wir mit der Lösung dieser Aufgabestellung beginnen, sehen wir uns das Grundgerüst der beiden Formen an (aus Gründen der Übersichtlichkeit, habe ich die Kommentare entfernt, da sich diese jeder nach dem Generieren einer neuen Form selbst ansehen kann):
namespace test4 { public class Form1 : System.Windows.Forms.Form { private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Vom Windows Form-Designer generierter Code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.Size = new System.Drawing.Size(300,300); this.Text = "Form1"; } #endregion [STAThread] static void Main() { Application.Run(new Form1()); } } }
Und nun die Form2:
namespace test4 { public class Form2 : System.Windows.Forms.Form { private System.ComponentModel.Container components = null; public Form2() { InitializeComponent(); } protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Vom Windows Form-Designer generierter Code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.Size = new System.Drawing.Size(300,300); this.Text = "Form2"; } #endregion } }
Gut. Nun fügen wir der Form einen Button button1 hinzu. Dieser soll nun zuerst die Variable id in Form2 befüllen und dieser erst danach anzeigen. Was benötigen wir an dieser Stelle?
Wir müssen in der Form2 eine Membervariable mit diesem Namen und vom korrekten Typ setzen. Um auf diesen Wert zuzugreifen, werden wir eine Property verwenden, damit der Zugriff auch tatsächlich sauber durchgeführt wird.
Im allgemeinen Deklarationsteil ist also folgende Zeile in Form2 hinzuzufügen:
private int id = 0;
Wir versehen unsere Membervariable hier mit einem Defaultwert von 0. Der Defaultwert von Integer-variablen beträgt zwar auch 0, ist mit dieser Variante jedoch schneller ersichtlich und sollten später Änderungen im Framework vorgenommen werden, würde uns dies nicht betreffen (derartige Änderungen dürfte jedoch nicht bevorstehen).
Des weiteren müssen wir uns eine Property erstellen, der wir den gewünschten Wert übergeben können und die uns daraufhin den Wert in unsere Membervariable schreibt. Diese muss den Modifier (Sichtbarkeit) public besitzen, damit wir von ausserhalb der Form2 darauf zugreifen können. Der Code dafür sieht folgendermaßen aus:
public int Id { get { return this.id; } set { this.id = value; } }
Damit ist nun auch unsere Property vorhanden mit der wir den Wert setzen können. Wir kommen nun zur Form1, in der wir nun im Click-Event unseres Buttons die Form2 instanzieren, den Wert setzen und dann die Form zur Anzeige bringen. Um das Setzen des Wertes ersichtlich zu machen, werden wir der Form2 ein Label vermachen und in der Form2_Load dem Label den Wert der Membervariable id übergeben. Zuerst jedoch die Änderungen in der Form1:
private void button1_Click(object sender, System.EventArgs e) { Form2 form2 = new Form2(); form2.Id = 15; form2.Show(); }
Wie wir sehen können, wird die Form2 instanziert, danach setzen wir mittels der Property Id einen Wert von 15 und bringen danach Form2 zur Anzeige.
Nun fehlt uns noch das Anzeigen des Wertes in der Form2. Dazu müssen wir das Form2_Load Event ändern. Diese sollte nach der Änderung wie folgt aussehen:
private void Form2_Load(object sender, System.EventArgs e) { this.label1.Text = this.Id.ToString(); }
Nun kann das Projekt gestartet werden. In der Form2 sollte im label1 nun der Wert 15 erscheinen. Somit hätten wir den Wert erfolgreich übergeben.
Copyright 2005 by Norbert EderSoo..Das ganze könnt ihr mal in die FAQ`s packen
-
Naja, in der FAQ sind bereits Beiträge dazu.
Und der Rest wird mit C# nicht klar kommen ;o)