C# Combobox aus aufgerufener Form veraendern

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hallo Leute,
ich haenge - mal wieder. Ich habe folgendes Problem:

Ich habe ein Fenster ("Start"), welches durch ein Click_Event "Formular oeffnen" ein neuen Dialog ("Neu") oeffnet. In diesem Fenster kann man verschiedene Textboxen ausfuellen und anschliessend speichern. Das geht so weit auch ganz gut.

Bisher hatte ich den Speicherbutton immer als DialogResult "OK" an das aufrufende Fenster zurueck gegeben und dann eine Combobox aktuallisieren lassen.

Das musste ich aber aendern, aus Gruenden des Bedienkompforts. Es hat mir bei einer unerlauben Eingabe von Werten immer alle Textboxen im Fenster "Neu" geloescht. Jetzt geht es, das die Fehlermeldung kommt und dann alle Eingaben vorhanden bleiben.

Allerdings wuerde ich nun gerne eine Methode aufrufen, welche dafuer sorgt, dass eine Combobox im Start Fenster, welche alle Dateinamen eines Pfades enthaelt, aktuallisiert wird.

Nur, WIE mach ich das?

Danke schon mal fuer eure hilfe!
 
Ist zwar glaube ich nicht die sauberste Methode, aber du könntest deinem "Neu"-Fenster im Konstruktor die Instanz deines "Start"-Fensters übergeben und dann über eine in der "Start"-Fenster-Klasse definierten Methode die Combobox aktualisieren. Sollte funktionieren, aber ist wohl kaum "Best Practice" ^^.

edit: Hier eine Möglichkeit mit Events, wesentlich sauberer. Beim Klick auf den Buttons eines Fensters wird eine neues Fenster mit Button geöffnet. Beim Klick auf diesen Button wird eine Textbox im Hauptfenster mit dem aktuellen Datum/Uhrzeit geupdatet:

Parent-Fenster
Code:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();

            form.updateTextBox += new Form2.UpdateTextBoxEventHandler(textBoxUpdate);

            form.Show();
        }

        public void textBoxUpdate(string text)
        {
            textBox1.Text = text;
        }

    }

Child-Fenster
Code:
public partial class Form2 : Form
    {
        public delegate void UpdateTextBoxEventHandler(string newText);

        public event UpdateTextBoxEventHandler updateTextBox;

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (updateTextBox != null)
            {
                updateTextBox(DateTime.Now.ToString());
            }
        }
    }

Deregistrieren der Events natürlich nicht vergessen!
 
Zuletzt bearbeitet:
Zurück
Oben