Datenübergabe zwischen 2 Windows Forms?

multimolti

Erfahrenes Mitglied
Hallo!
Ich möchte sowas machen wie man es bei manchem Programmen wie z.B. Gimp sieht, ich habe 2 Windows Forms, eine für mein Diagramm und eine für die Konfiguration, und sobald man in der Config-Form was ändert, soll das sofort im Diagramm übernommen werden.

Wie mache ich sowas am besten?
 
hi,

hier meine Lösungsansätze. Obs geht ist ne andere Sache. ICh würde es so machen:

Ich bin der Meinung das für das Hauptfenster ein Singleton reicht. Probier es bitte so ^^

  1. aus dem MainWindow (Programmfenster) ein Singleton machen
  2. dann getter und setter für das Hauptfenster machen
  3. und dann kannste aus jedem beliebigen Fenster die Daten per Setter übergeben (z.B. MainWindow.getInstance().setData(Object object);)

Sry wenn sich das ein bisschen nach Java anhört :p

Greeze Chimaira
 
Das habe ich mir auch überlegt, das das is so aufwendig, weil dann auch nur die Werte geändert werden und noch nicht das Diagramm neu gezeichnet wird.

Ich habe es jetzt ganz billig gelöst, einfach die Config-Form mit Show() anzeigen lassen, die Checkboxen dadrin auf "public" setzen und dann deren "CheckedChanged"-Events von der Hauptform aus auf einen "config_Changed"-Eventhandler legen.

Funktioniert 1a mit minimalem Aufwand.
 
hmm, ich denke da muss man selber entscheiden was sauberer ist. Ich hätte es mit Singleton gemacht. Ist nicht schwer und geht schnell.

Greeze Chimaira
 
Erstell einfach eine Klasse für deine Diagrammdaten mit einem Event was ausgelöst wird wenn was geändert wird.
Das Event wird dann bei der Diagrammform ausgelöst.

Klassen werden immer By Reference übergeben, deshalb denke ich mal ist das die beste Lösung.

Beide Forms sollten natürlich die gleiche Refenz halten ;)
 
Zuletzt bearbeitet:
Das ist alles so endlos viel Aufwändiger als meine Lösung, und die ist doch auch sauber:

Code:
// In den Constructor der Form1:

            config = new Config();

            config.cbx_grid.CheckedChanged += new EventHandler(config_Changed);
            config.cbx_names.CheckedChanged += new EventHandler(config_Changed);
            config.cbx_points.CheckedChanged += new EventHandler(config_Changed);
            config.cbx_values.CheckedChanged += new EventHandler(config_Changed);

            config.Show();

// weiter unten in der Form1:
        void config_Changed(object sender, EventArgs e)
        {
            // ändere mein Diagramm...
        }
 
Zurück