This article has been localized into German by the community.
Events in Benutzersteuerelementen
In einem früheren Kapitel haben wir uns mit der Definition von Eigenschaften für unser Benutzersteuerelement befasst, aber Ereignisse können auch deklariert und verwendet werden! Auf diese Weise können Sie noch mehr Funktionen in Ihre Steuerelemente einbetten und Ihre Seite bei Bedarf auf bestimmte Ereignisse reagieren lassen, die vom Steuerelement ausgelöst werden.
In diesem Kapitel erstellen wir ein neues und sehr einfaches UserControl, um zu veranschaulichen, wie Ereignisse erstellt werden. Es hat keinen realen Zweck, sondern soll Ihnen nur zeigen, wie Sie Ereignisse in einem Benutzersteuerelement verwenden. Wenn Sie nicht wissen, wie Sie ein Benutzersteuerelement erstellen und verwenden, gehen Sie bitte ein paar Kapitel zurück. Dieser hier wird sich auf den Eventteil konzentrieren.
Zunächst erstellen wir ein neues, einfaches EventUserControl (Benutzersteuerelement) mit folgendem Code:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="EventUserControl.ascx.cs" Inherits="EventUserControl" %>
Page title:
<asp:TextBox runat="server" ID="txtPageTitle" />
<asp:Button runat="server" ID="btnUpdatePageTitle" OnClick="btnUpdatePageTitle_Click" Text="Update" />
Alles nur Text- und Server-Steuerelemente, die wir kennen. Im CodeBehind sieht es ungefähr so aus:
public partial class EventUserControl : System.Web.UI.UserControl
{
private string pageTitle;
public event EventHandler PageTitleUpdated;
protected void btnUpdatePageTitle_Click(object sender, EventArgs e)
{
this.pageTitle = txtPageTitle.Text;
if(PageTitleUpdated != null)
PageTitleUpdated(this, EventArgs.Empty);
}
public string PageTitle
{
get { return pageTitle; }
}
}
Wir haben eine Titelseite-Containervariable und eine Eigenschaft dafür definiert. Dann haben wir eine neue Sache, eine Veranstaltung hinzugefügt. Wie Sie sehen können, ist es wie jede andere Art von Feld definiert, aber es ist ein bisschen anders. Die Theorie dazu wird im C#-Tutorial erklärt, daher werden wir hier nicht darauf eingehen.
Im Click-Ereignis unserer Schaltfläche legen wir das Feld pageTitle fest. Dann prüfen wir, ob PageTitleUpdated, unser Event, null ist. Wenn dies nicht der Fall ist, bedeutet dies, dass wir dieses Ereignis irgendwo abonniert haben. In diesem Fall senden wir eine Benachrichtigung, indem wir PageTitleUpdated als Methode aufrufen. Als Parameter senden wir diesen (einen Verweis auf das Benutzersteuerelement selbst) als Absender und einen leeren EventArgs-Parameter. Dadurch wird sichergestellt, dass alle Abonnenten benachrichtigt werden, dass der Seitentitel gerade aktualisiert wurde. Jetzt habe ich auf unserer Seite unser UserControl folgendermaßen deklariert:
<%@ Register TagPrefix="My" TagName="EventUserControl" Src="~/EventUserControl.ascx" %>
Und fügte es so ein:
<My:EventUserControl runat="server" ID="MyEventUserControl" OnPageTitleUpdated="MyEventUserControl_PageTitleUpdated" />
Wie Sie sehen, haben wir einen Ereignishandler für das PageTitleUpdated-Ereignis definiert, als wäre es ein anderes Serversteuerelement. Im CodeBehind unserer Seite definieren wir den einfachen Ereignishandler für das UserControl-Ereignis wie folgt:
protected void MyEventUserControl_PageTitleUpdated(object sender, EventArgs e)
{
this.Title = MyEventUserControl.PageTitle;
}
So einfach ist das! Das Aktualisieren des Seitentitels hätte natürlich auch direkt über unser UserControl erfolgen können. Dies ist nur ein einfaches Beispiel für die Verwendung von Ereignissen. Wie Sie später wahrscheinlich erfahren werden, wird diese Technik in vielen Situationen nützlich sein.