Wie komme ich an Objekte in einer anderen Form?



  • Hallo,

    Es gibt 2 Forms.
    Ich habe in Form2 ein OK Button. Wird dieser gedrückt möchte ich in Form1 ein paar Objekte auf Visible setzen und form 2 schließen.

    //In Form2:

    private void button1_Click(object sender, EventArgs e)
            {
                // Form1.Label1.Visible = True;   geht natürlich nicht...
                this.Close();
    

    Wie spreche ich also diese Objekte an?



  • Du brauchst in deiner Instanz von Form2 eine Referenz auf eine Instanz von Form1 um dies tun zu können. Solltest du nicht verstehen, von was ich rede, dann musst du dir ein Grundlagenbuch über OOP reinzeihen 😉

    MfG



  • Generell sollte man nicht direkt auf Komponenten einer anderen Form zugreifen, sondern dafür dann eine Schnittstelle definieren, d.h. Methoden dafür bereitstellen.

    Du benötigst jedoch einen anderen Weg. Es kommt jetzt aber darauf an, wie du Form2 aufrufst:

    1. ShowDialog (modal):

    if(form2.ShowDialog(this) == DialogResult.OK)
    {
       Label1.Visible = True;
    }
    

    2. Show (nicht-modal):
    dann abonniere das FormClosed-Event

    // Aufruf
    Form2 form2 = new Form2();
    form2.FormClosed += Form2_FormClosed; // ab C# 2.0, sonst: new FormClosedEvent
    (Form2_FormClosed);
    form2.Show();
    
    // Event behandeln
    void Form2_FormClosed(object sender, FormClosedEvent e)
    {
       Label1.Visible = True;
    }
    

    evtl. sind jetzt noch ein paar Syntax-Fehler im Code (da ich ihn aus dem Kopf aufgeschrieben habe), ansonsten einfach in der MSN-Hilfe unter FormClosed nachschauen.

    Ich hoffe, das hilft dir weiter.



  • Ich hätte da auch noch eine Lösung:

    //Form1: Mit Button
    public partial class Form1 : Form
        {
            public delegate void MakeObjectsVisibleDelegate();
            public event MakeObjectsVisibleDelegate MakeObjectsVisibleEvent;
    
            protected void OnMakeObjectsVisible()
            {
                if (this.MakeObjectsVisibleEvent != null)
                    this.MakeObjectsVisibleEvent();
            }
            public Form1()
            {
                InitializeComponent();
                Form2 f2 = new Form2(this);
                f2.Show();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                this.OnMakeObjectsVisible();
            }
        }
    
    //Form2: mit 3 labeln, welche ich auf invisible jesetzt habe.
    public partial class Form2 : Form
        {
            public Form2(Form1 f)
            {
                InitializeComponent();
                f.MakeObjectsVisibleEvent +=new Form1.MakeObjectsVisibleDelegate(f_MakeObjectsVisibleEvent);
            }
            private void f_MakeObjectsVisibleEvent()
            {
                this.label1.Visible = true;
                this.label2.Visible = true;
                this.label3.Visible = true;
            }
        }
    


  • Ok Vielen Dank. Alle 3 Antworten sind sehr hilfreich.


Anmelden zum Antworten