Ich habe eine WinForms-Anwendung. Meine Form abgeleitete Klasse hat UserControl abgeleitete Klasse. Ich habe einfach mehrere Steuerelemente in einem UserControl zusammengefasst, um die Wiederverwendung zu vereinfachen. Die Load
Veranstaltung von UserControl
nicht abgefeuert wird. Muss ich eine Eigenschaft festlegen?
Antworten
Zu viele Anzeigen?Versuchen Sie das Überschreiben der OnLoad()-Methode in Ihrem UserControl. Von MSDN:
Die OnLoad-Methode ermöglicht auch abgeleitete Klassen, das Ereignis zu behandeln, ohne einen Delegaten anzuhängen. Dies ist die bevorzugte Technik für die Behandlung des Ereignis in einer abgeleiteten Klasse.
protected override void OnLoad(EventArgs e)
{
//Your code to run on load goes here
// Call the base class OnLoad to ensure any delegate event handlers are still callled
base.OnLoad(e);
}
Es gäbe keine besonderen Eigenschaften, die Sie für die Auslösung von UserControl-Ereignissen festlegen müssten. Sie haben eine von 2 Möglichkeiten, das Ereignis zu abonnieren. Wählen Sie in den Eigenschaften (Property Grid) die Ereignisliste aus...Doppelklicken Sie auf die Eigenschaft Load. Alle erforderlichen Codeteile werden eingefügt, und Ihr Cursor wartet bei der richtigen Methode auf Sie.
Die zweite Methode ist das Abonnieren des Ereignisses wie folgt:
public MyMainForm( )
{
InitializeComponents();
myUserControl.Load += new System.EventHandler(myUserControl_Load);
}
void myUserControl_Load(object sender, EventArgs e)
{
MessageBox.Show(((UserControl)sender).Name + " is loaded.");
}
Ein Grund dafür, dass das Load-Ereignis nicht mehr ausgelöst wird, ist, wenn Sie ein übergeordnetes Steuerelement haben, das etwas wie das folgende tut
protected override void OnLoad(EventArgs e)
{
//do something
}
Sie müssen immer darauf achten, dies zu tun
protected override void OnLoad(EventArgs e)
{
//do something
base.OnLoad(e);
}