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
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.
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
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...?
Danke euch
und habe nach eurem Vorschlag versucht, aber wieder gleich...
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
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.
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...
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