[C#] Änderungen von SubForm an MainForm übergeben

Drucken
( 3 Votes )
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 02.12.2011 Zuletzt aktualisiert am 03.02.2012 Geschrieben von Jonny132
Will man Werte von einer Unterform an die Hauptform übergeben kann man delegates + events verwenden.
Man könnte auch die Steuerelemente der Unterform auf public setzen und darauf zugreiffen, was jedoch schlechter Stil wäre.

Wie das mit den delegates und events funktioniert, zeige ich euch an einem Beispiel.
Erstellt einfach ein neues Projekt mit 2 Forms, dem Hauptform und dem Unterform.
Auf das Unterform setzt ihr eine TextBox und abboniert das TextChanged - Ereignis.
Was wir nun vorhaben ist, dass wenn man nun in der UnterForm in die TextBox etwas eingibt, den Titel der Hauptform ändert.

Code für die Hauptform

 public partial class Form1 : Form
 {
  public Form1()
 {
    InitializeComponent();
 }
 
  private void Form1_Load(object sender, EventArgs e)
 {
    Form2 f2 = new Form2();
    f2.OnSetNewTitle += new Form2.SetNewTitle(f2_OnSetNewTitle);
    f2.Show();
  }
 
  void f2_OnSetNewTitle(string message)
  {
     this.Text = message;
  }
}
Im Form1_Load Inizialisieren wir die UnterForm und abbonnieren das OnSetNewTitle Event und Zeigen Sie an.
Direkt im Event setzen wir nur noch den Titeltext der Hauptform neu mit dem Übergebenen Parameter des Events.

Code der Unterform

 public partial class Form2 : Form
 {
  public delegate void SetNewTitle(string message);
 
  public event SetNewTitle OnSetNewTitle;
 
  public Form2()
 {
   InitializeComponent();
 }
 
  private void textBox1_TextChanged(object sender, EventArgs e)
  {
     if(OnSetNewTitle != null)
       OnSetNewTitle(textBox1.Text);
  }
}

Zuerst erstellen Sie ein delegate, das die Signatur beinhaltet, das Sie brauchen. In diesem fall wollen wir nur einen String (message) an die Hauptform übergeben. Mittels event erstellen wir nun eine Referent auf das Delegate das wir nun zu jedem Zeitpunkt abfeuern können. Wird nun ein Text in die TextBox eingegeben überprüfen wir zuerst, ob die Hauptform das Event auch abboniert hat, da es sonst zu einer Exception führen würde. Wenn die Bedienung eintritt wird das Event gefeuert.

Wie Sie sehen wird der Titel der Hauptform geändert.

 

    Veröffentlichen Sie ihre Kommentare ...