Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann ich eine Form aus einer anderen Form aktualisieren?
Rico913
myCSharp.de - Member



Dabei seit:
Beiträge: 93

Themenstarter:

Wie kann ich eine Form aus einer anderen Form aktualisieren?

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
HansFred
myCSharp.de - Member



Dabei seit:
Beiträge: 48

beantworten | zitieren | melden

weil du immer eine neue instanz der form erzeugst
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.432

beantworten | zitieren | melden

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()?
private Nachricht | Beiträge des Benutzers
Rico913
myCSharp.de - Member



Dabei seit:
Beiträge: 93

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers