Laden...

In Form_1 die Form2_Closing_Events ablösen?

Erstellt von JackieChen vor 15 Jahren Letzter Beitrag vor 15 Jahren 918 Views
J
JackieChen Themenstarter:in
38 Beiträge seit 2008
vor 15 Jahren
In Form_1 die Form2_Closing_Events ablösen?

Hallo,
ich möchte in Form_1 ein Event definieren, damit bei dem Closing der Form_2 dies Event abgelöst werden kann.

Form1:

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace test_Form_close
{
    public partial class Form1 : Form
    {
        public Form2 frm2 = new Form2();

        public Form1()
        {
            InitializeComponent();
            frm2.Closing += new System.ComponentModel.CancelEventHandler(frm2_Closing);
        }

        void frm2_Closing(object sender,System.ComponentModel.CancelEventArgs e)
        {
            label1.Text = "Goodbye";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
        }
    }

}

Form 2:

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace test_Form_close
{
    public partial class Form2 : Form
    {
        public delegate void CancelEventHandler(object sender, CancelEventArgs e);
        //public event CancelEventHandler Closing;
        public Form2()
        {
            InitializeComponent();
            this.Closing+=new System.ComponentModel.CancelEventHandler(Form2_Closing);
        }

        private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            MessageBox.Show("Hello");
        }
    }
}

Bei Form_2 erfolgt das Messagebox, bei Form_1 nix passiert. Woran liegt mein Fehler?

Vielen Dank!

JackieChen

2.760 Beiträge seit 2006
vor 15 Jahren

        private void button1_Click(object sender, EventArgs e)
        {
            frm2 = new Form2();
            frm2.Show();
        }

So gehts (glaub ich)

Du abonierst das event einer Instanzvariable baust danach (bedingt durch die weitere Deklaration) eine komplett neue Form und abonierst deren event aber nicht.

J
3.331 Beiträge seit 2006
vor 15 Jahren

Im wesentlichen hat jaensen den richtigen Hinweis gebracht.

@JackieChen
Du hast zweimal "new Form2" eingebaut: das erste Mal automatisch i.V.m. dem Konstruktor und der Deklaration, das zweite Mal vor dem Show-Aufruf. Aber nur der erste Aufruf hat den EventHandler bekommen, der zweite nicht.

Jürgen

J
JackieChen Themenstarter:in
38 Beiträge seit 2008
vor 15 Jahren

Danke,
mein Fehler war bei Form1:
es sollte

frm2.Closing += new Form2.CancelEventHandler(frm2_Closing);

sein.
aber gibt es Fehlermeldung:
Cannot implicitly convert type 'test_Form_close.Form2.CancelEventHandler' to 'System.ComponentModel.CancelEventHandler'
Wer könnte mir helfen...?

J
JackieChen Themenstarter:in
38 Beiträge seit 2008
vor 15 Jahren

Danke euch
und habe nach eurem Vorschlag versucht, aber wieder gleich...

2.760 Beiträge seit 2006
vor 15 Jahren

Hmmm.... im Endeffekt: [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

[EDIT]
Schau dir das nochmal genauer an:


 System.ComponentModel.CancelEventHandler(frm2_Closing);
public delegate void CancelEventHandler(object sender, CancelEventArgs e);

System.ComponentModel.CancelEventHandler
delegate void CancelEventHandler

G
43 Beiträge seit 2008
vor 15 Jahren

Kann man nicht einfach folgendes machen:

 this.Closing+= Form2_Closing;

Ich spar mir eigentlich immer explizit ein DelegateTyp-Objekt zu erstellen, genau aus dem Grund das es der falsche DelegateTyp sein koennte.

J
JackieChen Themenstarter:in
38 Beiträge seit 2008
vor 15 Jahren

Hmmm.... im Endeffekt:
>

[EDIT]
Schau dir das nochmal genauer an:

  
 System.ComponentModel.CancelEventHandler(frm2_Closing);  
public delegate void CancelEventHandler(object sender, CancelEventArgs e);  
  

System.ComponentModel.CancelEventHandler
delegate void CancelEventHandler

Sorry, verstehe ich nicht....Ich bin Anfänger.... X(
Es sollte

frm2.Closing += new Form2.CancelEventHandler(frm2_Closing);

sein,oder?
Aber dann ist die Kompilefehler
Wenn

frm2.Closing += new System.ComponentModel.CancelEventHandler(frm2_Closing);

keine Fehlermeldung, aber nix passiert in Form1...

J
JackieChen Themenstarter:in
38 Beiträge seit 2008
vor 15 Jahren

Entschulidigung, aber erster Hinweis war super richtig, nur bei button1_click
habe ich vergessen, frm2= new Form2(); zu löschen.

Vielen Dank für euche Hilfe!
JackieChen