Erklären Sie code für das benutzerdefinierte Ereignis in user control
Gab mir jemand diesen code, der funktioniert Super. Aber ich würde wirklich gerne verstehen, was gerade im inneren passiert es. Könnte jemand bitte erklären? Was ist die Bedeutung von jedem Teil des Codes? Der code ist im inneren ein benutzerdefiniertes Steuerelement, das zwei Etiketten in einem Schaltschrank.
Auch ich habe gesehen, einige benutzerdefinierte events Steuern, verwenden Sie die hinzufügen/entfernen-syntax, was ist dass denn?? Was ist der Unterschied, was ist hier passiert?
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public event EventHandler MyCustomClickEvent;
protected virtual void OnMyCustomClickEvent(EventArgs e)
{
//Here, you use the "this" so it's your own control. You can also
//customize the EventArgs to pass something you'd like.
if (MyCustomClickEvent != null)
MyCustomClickEvent(this, e);
}
private void label1_Click(object sender, EventArgs e)
{
OnMyCustomClickEvent(EventArgs.Empty);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe meine Kommentare unten. Auch für eine ausführliche event-ich gebloggt auf diesem Konzept eine Weile zurück, wo ich mehr ins detail gehen, den gesamten Prozess.
Ich würde empfehlen, das Lesen auf Veranstaltungen für C# auf der MSDN-Website. Dies wird im detail behandelt.
Grundsätzlich
MyCustomClickEvent
ist ein Ereignis. DieOnMyCustomClickEvent
Methode wird verwendet, um das Ereignis auslösen, aber in einer Weise, die Unterklassen können auch dieses Ereignis ausgelöst, wenn erforderlich.Wenn Sie auf "label1", die
OnMyCustomClickEvent
Methode ausgeführt wird, die das Ereignis auslöst. Alle Delegierten abonniert das Ereignis wird ausgeführt, dass Punkt.Erwähnten Sie sehen die hinzufügen/entfernen-syntax für Veranstaltungen in einigen custom control Beispiele. Die meisten dürften diese Beispiele sind verwenden Sie die
UserControl
Klasse "'Events
Eigenschaft zum speichern von event-Handler, wie im folgenden Beispiel:Die Idee ist, dass in der Regel ein Verbraucher einer Kontrolle wird nicht gehen zu wollen, um jedes einzelnes Ereignis, dass das Steuerelement verfügbar macht. Wenn jedes Ereignis ist definiert als ein "Feld" Ereignis (wie in deinem Beispiel), dann ist jedes Ereignis stattfinden wird, ein Stück Erinnerung, auch wenn es keine Teilnehmer für dieses event. Wenn Sie eine komplexere Seite aufgebaut, die von Hunderten von Steuerelementen, von denen jedes möglicherweise Dutzende von Veranstaltungen, der Speicherverbrauch für die ungenutzte Veranstaltungen ist nicht unerheblich.
Dies ist der Grund, warum die
System.ComponentModel.Component
Klasse (der Basisklasse von derSystem.Windows.Forms.Control
Klasse) hat eineEvents
Eigentum, das ist im Grunde ein Wörterbuch zum speichern von event-handler-Delegaten. So wird jeder event implementiert ist mehr wie eine Eigenschaft als ein Feld. Die add - /remove-Handler für jedes Ereignis speichern oder entfernen von Delegaten aus derEvents
Wörterbuch. Wenn ein Ereignis nicht verwendet, dann gibt es einfach nicht ein Eintrag in derEvents
Wörterbuch für es, und keinen zusätzlichen Speicher verbraucht wird, die für das Ereignis. Es ist ein trade-off zu tun, etwas mehr Arbeit (mit um die event-handler) zu sparen, etwas mehr Speicher.EDIT: behoben, meine Antwort beziehen sich auf Windows Forms, anstatt ASP.NET obwohl die Konzepte sind die gleichen.
Bezug auf die hinzufügen/entfernen, dies ist eine "manuelle" Durchführung von Veranstaltungen. Die folgenden zwei Codefragmente die gleiche Sache zu tun.
Automatische Umsetzung:
Manuelle Umsetzung:
Dies ist genau die gleiche Idee wie automatische Eigenschaften wo:
Macht genau das gleiche wie:
Den Unterschied zwischen diesen snippets ist, dass mit der manuellen Implementierungen, erhalten Sie mehr Kontrolle. Beispiele sind:
Dictionary
.Den
Form
- Klasse z.B. hat der letztere um die Anzahl der Felder in der Form-Klasse nach unten.