Laden...

Wie kann ich eine Form aus einer anderen Form aktualisieren?

Erstellt von Rico913 vor 3 Jahren Letzter Beitrag vor 3 Jahren 484 Views
R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren
Wie kann ich eine Form aus einer anderen Form aktualisieren?

Hi,

folgendes:
Ich greife von Form1 auf ein anderes Form (Form_Kalibrierungsfenster) zu. Darin habe ich zwei Textboxen, Comboboxen und zwei Buttons.
Der User soll in den Comboboxen einen Wert und eine Einheit auswählen. Daraus wird ein Pixelwert berechnet, der mit Klick auf den Button, angezeigt werden soll.

Nun habe ich folgendes Problem:
Wenn mein Code, folgend aussieht, dass Form_Kalibrierungsfenster aushalb der Funktion erstellt wird, wird lbl_PixelSize.Text geändert:



       Form_Kalibrierungsfenster _Kalibrierungsfenster = new Form_Kalibrierungsfenster();
        
        public void Berechnung_Kalibrierung()
        {
            
            if (WaitHandler == false)
            {
                _Kalibrierungsfenster.lbl_Bilddaten.Text = Image_Width.ToString() + " x " + Image_Height.ToString() + " Pixel";

                _Kalibrierungsfenster.Show();
                _Kalibrierungsfenster.TopMost = true;

            }
            else if (WaitHandler == true)
            {
                WaitHandler = false;
                _Kalibrierungsfenster.lbl_PixelSize.Text = Math.Round(PixelSize_Kali, 5).ToString() + " " + Kali_Unit_Input + " pro Pixel";

            }
        }

Problem dabei, ich kann das geschlossene Form nicht nochmal öffnen.

Wenn ich aber:


 Form_Kalibrierungsfenster _Kalibrierungsfenster;
        
        public void Berechnung_Kalibrierung()
        {
            _Kalibrierungsfenster = new Form_Kalibrierungsfenster();

            if (WaitHandler == false)
            {
                _Kalibrierungsfenster.lbl_Bilddaten.Text = Image_Width.ToString() + " x " + Image_Height.ToString() + " Pixel";

                _Kalibrierungsfenster.Show();
                _Kalibrierungsfenster.TopMost = true;

            }
            else if (WaitHandler == true)
            {
                WaitHandler = false;
                _Kalibrierungsfenster.lbl_PixelSize.Text = Math.Round(PixelSize_Kali, 5).ToString() + " " + Kali_Unit_Input + " pro Pixel";

            }
        }

Wenn ich es aber so schreibe, funktioniert das Form-Handling, wie ich es möchte, aber nach Klick auf meinen Button wird lbl_PixelSize.Text nicht aktualisiert.

Woran liegt das?

H
48 Beiträge seit 2020
vor 3 Jahren

weil du immer eine neue instanz der form erzeugst

4.938 Beiträge seit 2008
vor 3 Jahren

Hallo,

du hast damit so ziemlich alle Anfängerfehler gemacht, die ich in meinem Artikel Kommunikation von 2 Forms beschrieben habe.

Außerdem: warum öffnest du das Fenster denn nicht modal mittels ShowDialog()?

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

Danke für die Hinweise!

@TH69: ShowDialog() hat bei mir nicht funktioniert, da das Form direkt geschlossen wird. Möglicherweise gibt es da einen Weg, aber da fehlt mir noch etwas Wissen.

Dein Tutorial kannte ich bis dato nicht. Da ich öffter, verschiedenste Unterformulare öffnen muss, werde ich das nachher durcharbeiten. Da gibt es sicher Überarbeitungsbedarf - vielen Dank!

Bis dahin habe ich die für mich gängige Lösung:


Form_Kalibrierungsfenster _Kalibrierungsfenster;

        public void Berechnung_Kalibrierung()
        {
            

            if (WaitHandler == false)
            {
                
                _Kalibrierungsfenster = new Form_Kalibrierungsfenster();
                _Kalibrierungsfenster.Show();
                _Kalibrierungsfenster.TopMost = true;
                _Kalibrierungsfenster.lbl_Bilddaten.Text = Image_Width.ToString() + " x " + Image_Height.ToString() + " Pixel";

            }
            else if (WaitHandler == true)
            {
                WaitHandler = false;
                _Kalibrierungsfenster.lbl_PixelSize.Text = Math.Round(PixelSize_Kali, 5).ToString() + " " + Kali_Unit_Input + " pro Pixel";

            }
        }

Viele Grüße