Announcement

Collapse
No announcement yet.

Parameter übergeben von Form zu Form

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Parameter übergeben von Form zu Form

    Moinsen,

    ich habe mal wiederr eine Frage. Ich habe eine Form1 und eine Form2. Die Form 1 enhält drei Labels: label1, label2, label3. Diese sollen Werte enthalten, die ich über eine TextBox in der Form 2 Eintragen kann. Form 2 öffnet sich über einen Click auf Form 1 Wenn ich die bei der Form 2 nun auf einen Button clicke, sollen diese Werte übertragen werden und dann wenn ich bei der Form 1 auf einen Button clicke schließlich angzeigt werden. Ich versuche schon die ganze Zeit das über get Methoden zu lösen, aber mein Problem ist, dass ich die Get Methode nicht in den Button reinkopieren darf. Wie geht das ganze denn dynamisch ohne das ich das reinkopieren kann?

    aussehen in Code sieht das ganze so:
    Code:
    Form 2:
    
    private void button1_Click(object sender, EventArgs e)
    {
     double label1_Wert = Convert.ToDouble(TextBox1.Text);
    }
    
    Form1:
    
    public string label1_Wert{get; set;}
    private void button_anzeigen_Click(object sender, EventArgs e)
    {
     label1.Value = label1_Wert;
    }
    Zuletzt editiert von Toni91; 15.11.2012, 12:49.

  • #2
    Kennt denn Form2 die Instanz von Form1 die sie erzeugt hat überhaupt? Das passiert nicht von selbst da musst du schon nachgeholfen haben. Also z.B. die Referenz von Form1 beim erzeugen von Form2 an Form2 mit übergeben. Damit Form2 eine Variable hat über die Form2 auf Form1 zugreifen kann.

    PS: Du merkst hoffentlich gerade wie wichtig es ist gute Namen für Klassen und Variablen zu vergeben um über den Code sprechen zu können

    Comment


    • #3
      Jo genau

      Code dazu :

      in form 2:

      Code:
      Form1 form_1 = new Form1();
      form_1.label1_Wert = Convert.ToInt32(TextBox.Text);

      Ich weiss auch das problem von dem ganzen. Es steckt in Form_1 Load und damit wird es nur geladen, wenn die Form 1 geladen wird. Also das heisst nur am Anfang. Wie kann ich das denn anders machen? Das er das dann sobald ich den Button klicke auf der Form 1, dass er dann auch die Werte aktualisiert.

      Man bedenke: Form 2 wird erst durch Form 1 aufgerufen. Kanns daran liegen?

      Grüße,

      Michael
      Zuletzt editiert von Toni91; 15.11.2012, 13:52.

      Comment


      • #4
        Hi,

        also eine ganz simple Methode wäre, die Werte aus Form2 in eine XML-Datei zu schreiben, welche Du in Form1 wieder lädst.

        lg

        Comment


        • #5
          Man bedenke: Form 2 wird erst durch Form 1 aufgerufen. Kanns daran liegen?
          Jein. Es liegt daran das Form2 die Form1 nicht kennt. Du mußt der Form2 die Form1 mit der du sprechen willst irgendwie übergeben damit Form2 irgendwas auf Form1 aufrufen kann.
          Das was du machst mit new Form1() ist ein weitere andere Form1 zu erzeugen also eine 2.te Instanz die nicht die ist die du ursprünglich benutzt hast um Form2 zu öffnen. An dieser neuen Form1 irgendwas zu ändern macht keinen Sinn da das nicht die Form1 ist die angezeigt wird. Außer du packst zu deinem gezeigten Code noch ein form_1.Show() dann wirst du merken das du die eine 2.te Form1 angezeigt bekommst.

          Siehe dazu zum Beispiel diesen Artikel.

          Comment


          • #6
            Okay dann hab ich dich schon verstanden, stimmt. Ich erzeuge ein neues Objekt was mit dem anderen garnicht so viel zu tun hat ;-)

            Aber wie kann ich es denn lösen das er die andere Form benutzt? Aus deinem Artikel werde ich nicht so wirklich schlau. Was mir jetzt spontan einfallen würde ist, dass ich Form 1 von Form 2 erben lasse, aber ob das eine elegante Methode ist?

            Grüße

            Comment


            • #7
              Erben hilft hier rein gar nicht.
              Lies in dem verlinkten Artikel den Teil 'Typische Anfängerfehler - Neues Form-Objekt erstellen'. Das ist genau dein Problem mit Lösung und Code Beispielen.

              Comment


              • #8
                Vielleicht hilft dir diese Zusammenstellung: Kommunikation von 2 Forms. Welcher Lösungsweg richtig ist, hängt auch von der konkreten Situation ab.

                Wenn du Form2 nur als ergänzenden Dialog zu Form1 benutzen willst, sodass Form2 nach Erledigung der Eingaben wieder geschlossen werden kann, ist dies der einfachste Weg (nur aus der Erinnerung heraus geschrieben):
                Code:
                            using (Form2 Frm = new Form2()) {
                               // Werte nach Frm übergeben
                               // dann Frm aufrufen
                               if (Frm.ShowDialog(this) == DialogResult.OK) {
                                  // Werte von Form2 nach Form1 übernehmen
                               }
                            }
                Weil Form2 sowieso durch Form1 geöffnet werden soll, hast du auch bei jeder anderen Konstruktion innerhalb von Form1 (genauer: eines Objekts von diesem Typ) eine Referenz auf ein Objekt vom Typ Form2. Irgendwo in der Definition von Form1 steht also so etwas:
                Code:
                Form2 frm2;
                frm2 = new Form2();
                frm2.setTextBox1("schreib etwas hinein");
                frm2.Show();
                this.label1.Caption = frm2.getTextBox1();
                Diese Code-Zeilen stehen in Form1 an getrennten Stellen in verschiedenen Methoden. Die beiden get/set-Methoden deuten an, dass die Übergabe der Werte über public-Elemente von Form2 erfolgt.

                Der letzte Schritt, nämlich die Anpassung eines Wertes in Form1 durch ein Ereignis von Form2, ist komplizierter und kann hier nicht mit etwa vier Zeilen dargestellt werden. Das findest du dann über die genannten Links. Jürgen

                Comment


                • #9
                  Danke für deinen Link Jürgen. Damit habe ich es geschafft :-)

                  Comment

                  Working...
                  X