gleiche Fenster: gleiche Veränderungen

zarrandreas

Mitglied
Hi.

Ich möchte zwei Unterfenster in meinem Hauptprogramm nebeneinander öffnen und wenn ich in einem Fenster was ändere(z.B. Text), das diese Änderungen auch in dem anderem Fenser eintreten. Hat da einer Idee wie ich das am besten in c# umsetze.

Ich will so ein kleines Testprogramm schreiben wo ich z.B. eine Funktion in einem Fenster einstelle und die Änderungen in dem anderem zu sehen bekomme
 
Hi Andreas!
Das geht am besten mit eigenen Events. Deine Hauptform bietet Dir dazu eine Funktion an, die ein Event auslöst und das dazu gehörige Event. Deine Formen die benachrichtigt werden sollen, melden sich dazu einfach im z.B: Load bei diesem Event an. Wenn nun eine Form etwas ändert das in andere Formen auch geändert werden soll, dann schickst Du einfach mit der Funktion Deiner Hauptform ein Event an alle die es brauchen (die sich angemeldet haben).
Der Code für Events ist meist etwas verstreut über das Programm.. Hier die Zusammenfassung wie Du ein Event machst:

Code:
// Dies ist sozusagen der Funktionsprototyp Deines EventHandlers ausserhalb einer class
// zu deklarieren.
public delegate void TextChangeHandler (object sender, EventArgs args);

#region HauptFormCode
// Event Declaration in Deiner Hauptform -> hier melden sich Deine Childformen an
public event TextChangedEventHandler MyTextChanged;

// Funktion zum Auslösen des Events:
public void TextAenderung ()
{
    EventArgs args = new EventArgs();
    MyTextChanged(this,args);
}
#endregion

#region ChildForm Code
//Deine childformen melden sich dann bei der Hauptform an
frm_MdiParent.MyTextChanged += new TextChangeHandler (MyChildFunction);

// Um auf das Event richtig zu reagieren brauchst Du noch eine Funktion die dem 
// Prototypen entsprechen muss
private void MyChildFunction(object sender, EventArgs args)
{
   // Hier den geänderten Text in der Form aktualisieren.
}
#endregion

Irgendwo in Deinem Code mußt Du dann noch die Funktion Deiner Hauptform aufrufen.
Wenn Du auch noch den Text oder andere Infos mitliefern willst, machst Du Dir am besten eine eigene EventArgsClasse, die sich von EventArgs ableitet und halt zusätzliche Attribute zur Verfügung stellt.
Das ist meiner Meinung nach einer der sauberen Wege Formen zu benachrichtigen.

ACHTUNG: Vergiss nicht beim Beenden Deiner Childformen den Eventhandler wieder abzumelden. = Selber Code wie Anmelden nur mit -= anstelle des +=.

Hoffe das hilft Dir weiter ;-)
Ciao
Max
 
Ich habe das schon mit Observer Muster realisiert(aus Java Welt), aber ich denke ich werde es auf deine Art dann iumschreiben, weil diese mir mehr gefählt und ich diese ausprobieren möchte.
Danke
 
Zurück