Laden...

Variablen an Form übergeben klappt erst beim zweiten Mal

Erstellt von clickme vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.743 Views
Thema geschlossen
C
clickme Themenstarter:in
5 Beiträge seit 2010
vor 13 Jahren
Variablen an Form übergeben klappt erst beim zweiten Mal

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?

L
95 Beiträge seit 2009
vor 13 Jahren

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.

4.221 Beiträge seit 2005
vor 13 Jahren

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...

V
78 Beiträge seit 2008
vor 13 Jahren

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 😉

B
142 Beiträge seit 2007
vor 13 Jahren

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

Hinweis von michlG vor 13 Jahren

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

Thema geschlossen