Hallo,
wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht. Bitte helft mir 🙁
Folgende Situation: Aus Form1 sollen Variablen an Form2 übergeben werden. Form1 wird dann geschlossen.
Form1:
convert_files convert_files = new convert_files();
convert_files.dr = this.textBox1.Text;
convert_files.dr2 = this.textBox2.Text;
convert_files.fr = this.textBox3.Text;
convert_files.Show();
this.Close();
Form2:
public partial class convert_files : Form
{
public static string dr { get; set; }
public static string dr2 { get; set; }
public static string fr { get; set; }
public convert_files()
{
InitializeComponent();
this.label1.Text = dr + dr2 + fr;
}
}
Führe ich den Code aus, werden die Werte nicht übergeben (obwohl die textBoxen gefüllt sind). Klicke ich die Prozedur ein zweites mal durch, werden alle drei Variablen übergeben.
Was mache ich verkehrt?
Hallo
Schau mal hier
[FAQ] Kommunikation von 2 Forms
Edit: Ohje jetzt hab ich grad das ganze zu schnell überflogen.
Ich kann auf den ersten Blick keinen Fehler entdecken. Geh das ganze doch mal Schritt für Schritt im VS durch und schau dir an was passiert.
Du erstellst auf der ersten Zeile in Form1 ein Instanz der Klasse...
Hast darin aber die Werte statisch definiert...
Sorry das sind Grundlagen...
Dieser Thread wird eh gleich geschlossen 😃
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Obwohl das nach einer seltsamen "Technik" aussieht ist der eigentliche Fehler nicht, das die Variablen statisch sind, da die Klasse genauso wie das Objekt heißt (und somit auch die statischen Variablen angesprochen werden).
Der Grund warum es erst bei zweitem Aufruf funktioniert ist, dass bei der Objekterzeugung von convert_files die aktuellen Werte der statischen Variable benutzt/kopiert werden. Diese Strings werden erst im Nachhinein geändert. Das bedeutet beim zweiten Aufruf haben sie die Werte, die im ersten Aufruf in den Textboxen stehen.
Zum Thema "Kopien" von Strings siehe auch:
[FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik)
Du müsstest also die strings auf die richtigen Werte setzen, bevor du deine Form instanzierst.
Allerdings schaut das so aus, als würde da irgendwas falsch laufen. Die statischen Variablen scheinen keinen Sinn zu machen, wie Programmierhans schon gesagt hat 😉
Wenn du
this.label1.Text = dr + dr2 + fr;
ausführst, sind die Werte noch leer, da du sie erst nach dem Konstruktor definierst. Beim zweiten Mal klappt es dann. Entweder als Parameter mitgeben oder den Labeltext im entsprechenden Event füllen.
Gruß
Björn
Hallo clickme,
Siehe [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1
Wir setzen bestimmte Dinge als Grundlagen voraus und diese Frage zählt definitiv dazu.
In [FAQ] Kommunikation von 2 Forms und den bereits geposteten Antworten findest du alle Informationen die du brauchst
Grüße
Michael