Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren

Ereignisbehandlung zwischen zur Laufzeit geladenen angepassten Benutzersteuerelementen

Veröffentlicht: 09. Feb 2003 | Aktualisiert: 09. Nov 2004
Von Kyle Roche

In diesem Artikel werden zwei unterschiedliche Situationen beschrieben, in denen mithilfe eines Benutzersteuerelement bestimmte Vorgänge effizienter durchgeführt werden können. Zunächst wird ein Benutzersteuerelement erstellt, das als numerisches Auf-Ab-Steuerelement fungiert. In diesem Beispiel wird ein Webbenutzer-Steuerelement verwendet, um den Wert eines Serversteuerelements zu ändern, das sich auf dem Web Form befindet. Als Nächstes sehen wir uns ein Szenario an, in dem ein Web Form zwei Webbenutzer-Steuerelemente enthält. Wenn mit dem ersten Steuerelement ein Vorgang ausgeführt wird, muss das zweite reagieren. In diesem Beispiel wird aufgezeigt, wie benutzerdefinierte Ereignishandler für die Kommunikation zwischen zwei Benutzersteuerelementen verwendet werden. Darüber hinaus wird im zweiten Beispiel gezeigt, wie die Benutzersteuerelemente zur Laufzeit, anstatt zur Entwurfzeit geladen werden.

Anforderungen

  • Visual Studio.NET (C#)

  • Windows XP oder Windows 2000 (IIS muss installiert sein)

Auf dieser Seite

 Einführung
 Numerisches Auf-Ab-Steuerelement
 Einrichten des Projekts
 Hinzufügen des Webbenutzer-Steuerelements
 Einrichten des Webbenutzer-Steuerelements
 Auslösen des benutzerdefinierten Ereignisses
 Reagieren auf das Ereignis im Web Form
 Verarbeiten der benutzerdefinierten Ereignisse
 Beispiel für DropDownList-Steuerelement
 Einrichten des Projekts
 Einrichten der Webbenutzer-Steuerelemente
 Einrichten des Web Forms
 Zusammenfassung

wrox_logo

Diesen Artikel können Sie dank freundlicher Unterstützung von Wrox auf MSDN Online lesen. Wrox ist ein Partner von MSDN Online.

msdn_partner_logo

Einführung

Es gibt zahlreiche Entwurfsstrategien für die Benutzeroberfläche einer ASP.NET-Anwendung. Dazu gehört die Möglichkeit, Webbenutzer-Steuerelemente in die Benutzeroberfläche zu integrieren. Ein Webbenutzer-Steuerelement ist eine funktionale Einheit von Server- und HTML-Steuerelementen, die unabhängig von anderen Steuerelementen oder Benutzersteuerelementen auf dem Web Form agieren kann.

Da die Server- und HTML-Steuerelemente, aus denen ein Benutzersteuerelement besteht, auf der Seite des Steuerelements enthalten sind, fungiert ein Benutzersteuerelement als einzelnes Serversteuerelement, wenn es dem Web Form hinzugefügt wird. Webbenutzer-Steuerelemente können einem Web Form im Designer oder im Code zur Laufzeit hinzugefügt werden. Durch das Hinzufügen des Steuerelements zur Laufzeit sind Sie bei Ihrem Entwurf etwas flexibler. Das Steuerelement kann in verschiedenen Positionen auf der Seite geladen oder in einigen Fällen auch weggelassen werden.

Bei den meisten ASP.NET-Portalanwendungen werden Webbenutzer-Steuerelemente für die Präsentationsebene verwendet. Webbenutzer-Steuerelemente können eigene Methoden, Eigenschaften und Ereignisse entsprechend der jeweiligen Anwendungsanforderungen definieren.

Es gibt einige Punkte, die bei Webbenutzer-Steuerelementen zu berücksichtigen sind. Zunächst ist zu beachten, dass zum Laden eines Steuerelements zur Entwurfszeit in Ihrem Webanwendungsprojekt eine Kopie des Steuerelements vorhanden sein muss. Außerdem sollte auch auf den Prozessablauf eines Web Forms, das ein Benutzersteuerelement enthält, eingegangen werden. Beim Zurücksenden der Seite wird zuvor das Page_Load-Ereignis des Web Forms ausgeführt und der Code des Benutzersteuerelements initialisiert, unabhängig davon, von welchem Steuerelement die Anforderung gesendet wird. Das heißt, dass Eigenschaftenwerte im Benutzersteuerelement erst aktualisiert werden, wenn das Page_Load-Ereignis des Web Forms abgeschlossen ist.

Numerisches Auf-Ab-Steuerelement

In diesem Beispiel wird ein numerisches Auf-Ab-Steuerelement für die Verwendung in einer ASP.NET-Anwendung erstellt. Dadurch soll gezeigt werden, wie ein Webbenutzer-Steuerelement zum Ändern von Werten in einem Web Form verwendet wird. Das Web Form wird ein Textfeld-Steuerelement sowie ein angepasstes Webbenutzer-Steuerelment enthalten, das wir noch erstellen werden. Im Webbenutzer-Steuerelement sind zwei Schaltflächen-Steuerelemente (Auf und Ab) enthalten. Wir fügen dem Web Form den Code des Webbenutzer-Steuerelements zur Verarbeitung der Klickereignisse hinzu.

Einrichten des Projekts

Wählen Sie auf der Startseite von Visual Studio .Net Neues Projekt aus. Erstellen Sie eine neue "Webanwendung". Geben Sie dem Projekt einen entsprechenden Namen und klicken Sie auf OK. Für dieses Beispiel wird folgender Projektname verwendet: UserControlExample.

Anmerkung:
Wenn das Projekt erstellt wird, erhalten Sie standardmäßig ein Web Form mit dem Namen "WebForm1.aspx". Um sicherzustellen, dass eine Seite zurückgegeben wird, wenn ein Benutzer aus dem Web zum virtuellen Verzeichnis dieser Anwendung wechselt, sollten Sie den Namen Ihrer Hauptseite so ändern, dass die Seite von IIS standardmäßig zurückgegeben wird. Durch die Installation von .NET Framework wird IIS so konfiguriert, das Seiten mit dem Namen "Default.aspx" zurückgegeben werden, wenn keine bestimmte Seite angefordert wurde.
Ändern Sie den Namen WebForm1.aspx in Default.aspx. Ändern Sie aus Konsistenzgründen auch die Klassendeklaration für Default.aspx. Die Klassendeklaration für Default.aspx sollte wie folgt aussehen:

public class Default : System.Web.UI.Page

Anmerkung:
Die Klassendeklaration für Default.aspx kann in der Codeansicht des Web Forms und auch im Fenster für die Klassenansicht von Visual Studio .NET geändert werden. Um den Code eines Web Forms anzuzeigen, können Sie die Taste F7 drücken. Hierfür muss das Fenster Entwurf des Web Forms aktiv sein. Suchen Sie zum Ändern der Klassendeklaration über die Klassenansicht nach dem Klassennamen WebForm1 und klicken Sie mit der rechten Maustaste, um die entsprechenden Eigenschaften auszuwählen. Ändern Sie im Fenster Eigenschaften den Klassennamen in Default. Die Klassenansicht sollte wie folgt aussehen:

eventhandling_01

Bild 1

Hinzufügen des Webbenutzer-Steuerelements

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen Sie Hinzufügen aus. Wählen Sie im Popupmenü Webbenutzer-Steuerelement hinzufügen. aus.
Ändern Sie den Namen des Steuerelements in NumericUpDown.ascx und klicken Sie auf Öffnen (Open).

eventhandling_02

Bild 2

Wie Sie sehen, wurde im Projektmappen-Explorer unserem Projekt ein Webbenutzer-Steuerelement mit dem Namen NumericUpDown.ascx hinzugefügt.

Einrichten des Webbenutzer-Steuerelements

Klicken Sie im Fenster Projektmappen-Explorer mit der rechten Maustaste auf das neue Benutzersteuerelement und wählen Sie Designer anzeigen aus.
Fügen Sie dem Webbenutzer-Steuerelement NumericUpDown zwei Schaltflächen-Steuerelemente der Registerkarte Web Forms der ToolBox hinzu. Um dem Designer eine Schaltfläche hinzuzufügen, können Sie einfach auf das Schaltflächen-Steuerelement in der Toolbox doppelklicken. Da wir zwei Schaltflächen hinzufügen möchten, müssen wir zweimal doppelklicken.
Konfigurieren Sie die Schaltflächen im Eigenschaftenfenster wie folgt:
Button1

EIGENSCHAFT

WERT

ID

Increment

Text

+

Button2

EIGENSCHAFT

WERT

ID

Decrement

Text

-

Wenn die Schaltflächen konfiguriert sind, drücken Sie die Taste F7, um den Code für das Webbenutzer-Steuerelement anzuzeigen. Fügen Sie über der Page_Load-Methode folgenden Code hinzu:

public delegate void IncrementClickedHandler(object sender, EventArgs e); 
public event IncrementClickedHandler IncrementClicked; 
protected virtual void OnIncrementClicked(EventArgs e) 
{ 
 if (IncrementClicked != null) 
  IncrementClicked(this, e); 
} 
public delegate void DecrementClickedHandler(object sender, EventArgs e); 
public event DecrementClickedHandler DecrementClicked; 
protected virtual void OnDecrementClicked(EventArgs e) 
{ 
 if (DecrementClicked != null) 
  DecrementClicked(this, e); 
}

Anmerkung: Diese Methode muss nicht unbedingt über der Page_Load-Methode stehen. Sie sollten bei der Codierung jedoch einheitlich vorgehen. Diese Methode kann innerhalb der Klasse beliebig platziert werden.

Sehen wir uns nun noch einmal die weiter oben beschriebenen Vorgänge an. Dem Webbenutzer-Steuerelement wurden zwei benutzerdefinierte Ereignisse hinzugefügt. Ein Ereignis verarbeitet den Increment-Vorgang, während das andere den Decrement-Vorgang verarbeitet. Da diese Ereignisse für das Web Form verwendet werden, wurde sie als "Public" deklariert. Ein benutzerdefiniertes Ereignis wird in drei Schritten erstellt. Zuerst muss ein öffentlicher Delegat für den Ereignishandler erstellt werden. Diesem Handler sollte ein entsprechender Name gegeben werden. Er wird als Entwurf für Methoden verwendet, die auf dieses Ereignis reagieren. Im Beispiel deklariert der Delegat (object sender, EventArgs e) als seine Parameterzeichenfolge. Das bedeutet, dass jedes Ereignis, das diesen Delegaten verwendet, mit dieser Parameterzeichenfolge übereinstimmen muss. Der zweite Schritt zum Erstellen eines benutzerdefinierten Ereignisses besteht darin, mithilfe des event-Schlüsselworts sowie des Ereignishandler-Delegats ein öffentliches Ereignis zu deklarieren.

public event DecrementClickedHandler DecrementClicked;

Der Name des öffentlichen Ereignisses lautet DecrementClicked. Schließlich muss zum Weiterleiten des Ereignisses an den übergeordneten Container (das Web Form) ein virtuelles Ereignis ausgelöst werden. Dabei sollte es sich um ein geschütztes Ereignis handeln, das das von uns soeben deklarierte öffentliche Ereignis auslöst. In C# muss zunächst sichergestellt werden, dass das Ereignisobjekt nicht Null ist, bevor es verwendet werden kann. Dies ist bei VB.NET nicht erforderlich.

Auslösen des benutzerdefinierten Ereignisses

Wir fahren nun mit dem Einrichten der Schaltflächen Increment und Decrement fort, um das neue benutzerdefinierte Ereignis auszulösen. Kehren Sie zum Designer für NumericUpDown.ascx zurück, indem Sie die Registerkarte im Fenster Entwurf (sollte noch geöffnet sein) auswählen oder UMSCHALT + F7 drücken.

Um einen Ereignishandler für das Klickereignis der Schaltfläche Increment hinzuzufügen, müssen Sie im Designer auf die Schaltfläche doppelklicken. Es wird sofort die Deklaration für die Methode angezeigt, die das Klickereignis der Schaltfläche im Code verarbeitet, der der Datei zugrunde liegt. Fügen Sie für die Methode den folgenden Code hinzu:

private void Increment_Click(object sender, System.EventArgs e) 
{ 
 OnIncrementClicked(e); 
}

Kehren Sie zum Designer zurück und wiederholen Sie die Schritte für die Schaltfläche Decrement. Die Methodendeklaration für Decrement_Click sollte wie folgt aussehen:

private void Decrement_Click(object sender, System.EventArgs e) 
{ 
 OnDecrementClicked(e); 
}

Wie Sie sehen, lösen die beiden Methoden für die Klickereignisse der Schaltflächen jetzt die benutzerdefinierten Ereignisse aus, die zuvor deklariert wurden. Im Grunde wird hier die Verantwortung für die Verarbeitung dieser Ereignisse an das Web Form weitergegeben, das das Webbenutzer-Steuerelement enthält. Wir werden uns nun mit der Verarbeitung der Ereignisse durch das Web Form beschäftigen.

Reagieren auf das Ereignis im Web Form

Fügen Sie dem Designer zunächst ein TextBox-Steuerelement der Registerkarte Web Forms in der ToolBox hinzu. Legen Sie die Eigenschaften hierfür wie folgt fest:
TextBox1

EIGENSCHAFT

WERT

ID

ValueBox

Text

0

Ziehen Sie die Datei NumericUpDown.ascx aus dem Projektmappen-Explorer in den Designer und legen Sie sie rechts von der TextBox Wert ab. Der Entwurfsbereich sollte jetzt wie folgt aussehen:

eventhandling_03

Bild 3

Wie Sie sehen, wird das NumericUpDown-Benutzersteuerelement im Designer nicht visuell dargestellt. Hierbei handelt es sich um eine Einschränkung in Visual Studio. Die visuelle Bearbeitung von Benutzersteuerelementen in einem Web Form wird von Visual Studio nicht unterstützt.

Verarbeiten der benutzerdefinierten Ereignisse

Drücken Sie die Taste F7, um zur Codeansicht von Default.aspx zu wechseln. Fügen Sie unter dem Page_Load-Ereignis den folgenden Code ein.

private void incrementValue(object sender, EventArgs e) 
{ 
int NewValue = Convert.ToInt16(ValueBox.Text) + 1; 
 ValueBox.Text = NewValue.ToString(); 
} 
private void decrementValue(object sender, EventArgs e) 
{ 
 int NewValue = Convert.ToInt16(ValueBox.Text) - 1; 
 ValueBox.Text = NewValue.ToString(); 
}

Hier wurden zwei Methoden im Web Form erstellt, die zur Verarbeitung der benutzerdefinierten Ereignisse verwendet werden, die sich aus dem NumericUpDown-Webbenutzer-Steuerelement ergeben. Wie Sie sehen, verwenden wir keines der in der Methode deklarierten Argumente. Ereignishandler, wie die zuvor definierten decrementValue- und incrementValue-Methoden, müssen mit dem Delegaten des verarbeiteten Ereignisses übereinstimmen. In diesem Fall wurde im Delegat (object sender, EventArgs e) angegeben, so dass auch alle Handler damit übereinstimmen müssen. Es ist nicht erforderlich, (object sender, EventArgs e) zu verwenden. Wenn keine Argumente erforderlich sind, können sie im Ereignishandler weggelassen werden. Für Ereignisse ohne Argumente werden leere runde Klammern verwendet.
In den incrementValue- und decrementValue-Methoden wird einfach eine neue Integervariable (NewValue) deklariert und mit dem aktuellen Wert (der in der Text-Eigenschaft von ValueBox steht) gleichgesetzt, plus oder minus 1. Die Text-Eigenschaft gibt einen Zeichenfolgenwert zurück. Dieser Zeichenfolgenwert muss vor der Ausführung von Vorgängen zu einem Integer konvertiert werden. Sie können nicht implizit von einem string zu einem int konvertieren. Sie müssen die Convert-Klasse oder die Parse-Klasse verwenden.

Fügen Sie als Nächstes die folgende Deklaration mit den anderen Deklarationen oben im Klassensegment ein. Auf diese Weise können Sie über den Code auf das NumericUpDown-Steuerelement zugreifen. Der Standardname für das NumericUpDown-Steuerelement lautet NumericUpDown1. Wurde es umbenannt, müssen Sie den folgenden Code entsprechend ändern:

protected NumericUpDown NumericUpDown1;

Da die Klasse jetzt das NumericUpDown1-Objekt erkennt, kann auf die öffentlichen Ereignisse und Methoden im Code zugegriffen werden. Fügen Sie im Page_Load-Ereignis folgende Zeilen hinzu.

NumericUpDown1.IncrementClicked += new  
NumericUpDown.IncrementClickedHandler(this.incrementValue); 
NumericUpDown1.DecrementClicked += new  
NumericUpDown.DecrementClickedHandler(this.decrementValue);

Wir fügen der Default-Klasse eine private Methode hinzu, um die IncrementClicked-und DecrementClicked-Ereignisse des Web Forms zu verarbeiten. Legen Sie dazu das Ereignis des Steuerelements auf einen neuen Wert des Ereignishandlers fest. Das Argument für den neuen Handler sollte eine lokale Methode sein, in der die gleichen Ereignisargumente deklariert sind. Dies wird als "Signatur" bezeichnet. Der Grund dafür, dass dieser Code nicht in einem if(!IsPostBack)-Bedingungsblock steht, liegt darin, dass bei jedem Aufruf des Formulars das Ereignis einer Behandlungsmethode zugewiesen werden muss. Das NumericUpDown-Steuerelement kann jetzt ausgeführt werden. Drücken Sie die Taste F5 und verwenden Sie die Tasten + und -, um den Wert zu erhöhen oder zu verringern. Mit diesem Beispiel wurde gezeigt, wie Ereignisse von Webbenutzer-Steuerelementen in Web Forms verarbeitet werden.

eventhandling_04

Bild 4

Beispiel für DropDownList-Steuerelement

Wir sehen uns nun ein Beispiel an, bei dem das Webbenutzer-Steuerelement zur Laufzeit geladen wird. In diesem Beispiel wird ein Web Form zwei Webbenutzer-Steuerelemente zur Laufzeit laden. Wir werden diese Steuerelemente einem Bereich hinzufügen und eine Interaktion zwischen beiden ermöglichen. Das Web Form in diesem Beispiel fügt der Seite die Webbenutzer-Steuerelemente zur Laufzeit hinzu.
Eines der Webbenutzer-Steuerelemente enthält ein dropdownlist-Steuerelement, dessen AutoPostBack-Eigenschaft auf "true" festgelegt ist. Wenn das SelectedIndexChanged-Ereignis der Dropdownliste ausgelöst wird, lösen wir ein benutzerdefiniertes Ereignis aus, das an das jeweilige Web Form übergeben wird (ähnlich wie im ersten Beispiel). In diesem Beispiel wird jedoch nicht auf das benutzerdefinierte Ereignis selbst reagiert, sondern eine öffentliche Methode eines Webbenutzer-Steuerelements aufgerufen, das auch zur Laufzeit geladen wurde.

Einrichten des Projekts

Wie bereits erwähnt besteht dieses Beispiel aus einem Web Form, das zwei Webbenutzer-Steuerelemente enthält. Erstellen Sie zum Einrichten des Beispiels ein neues Webanwendungsprojekt mit dem Namen "EventHandling". (Wenn das vorherige Beispiel noch geöffnet ist, wird es von VS.NET geschlossen, nachdem Sie gefragt wurden, ob die Änderungen gespeichert werden sollen.)

Es wird ein neues Projekt mit "WebForm1.aspx" als Startseite erstellt. Benennen Sie "WebForm1.aspx" in "Default.aspx" um. Vergessen Sie nicht, die Klassendeklaration wie im vorherigen Beispiel zu ändern.

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste, und fügen Sie zwei Webbenutzer-Steuerelemente hinzu. Benennen Sie sie "Action" und "ReAction". Das Projekt sollte wie folgt aussehen:

eventhandling_05

Bild 5

Einrichten der Webbenutzer-Steuerelemente

Wie Sie wahrscheinlich bereits an den Namen der Steuerelemente erkannt haben, wird eines zum Senden des Ereignisses an das Web Form (Action) und das andere zum Reagieren auf das Ereignis des Web Forms (ReAction) verwendet. Richten Sie zuerst das Action-Webbenutzer-Steuerelement ein. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei Action.ascx, und wählen Sie Designer anzeigen aus. Fügen Sie mithilfe der Registerkarte Web Forms der Toolbox dem Webbenutzer-Steuerelement ein Panel-Steuerelement hinzu, in dem Sie in der Toolbox auf das Steuerelement doppelklicken oder es in das Fenster Entwurf des Webbenutzer-Steuerelements ziehen. Nennen Sie diesen Bereich "ActionPanel". In diesem Beispiel wurde die Beschriftung des Bereichs in "Action User Control" zur Laufzeitunterscheidung geändert. Dieser Schritt ist jedoch nicht erforderlich.
Fügen Sie dem ActionPanel ein DropDownList-Steuerelement der Registerkarte Web Forms in der Toolbox hinzu. Konfigurieren Sie DropDownList wie folgt:
DropDownList1

EIGENSCHAFT

WERT

ID

SomeList

Items

Item One, Item Two, Item Three

AutoPostBack

True

Drücken Sie die Taste F7, um für dieses Webbenutzer-Steuerelement den Klassencode anzuzeigen. Fügen Sie über dem Page_Load-Ereignis den folgenden Code hinzu:

public delegate void DropDownChangedHandler(object sender, EventArgs e); 
public event DropDownChangedHandler DropDownChanged; 
protected virtual void OnDropDownChanged(EventArgs e) 
{ 
if (DropDownChanged != null) 
  DropDownChanged(this, e); 
}

Dieser Codeabschnitt sollte dem im ersten Beispiel ähnlich sein. Die OnDropDownChanged-Methode wird aufgerufen, wenn das dropdownlist-Steuerelement einen neuen Wert zurücksendet. Dies wird wie folgt eingerichtet. Kehren Sie zum Designer für das Action -Steuerelement zurück, in dem Sie UMSCHALT + F7 drücken. Doppelklicken Sie auf das SomeList DropDownList-Steuerelement. Damit wird ein Standardereignis für das SelectedIndexChanged-Ereignis des Steuerelements erstellt. Fügen Sie die folgenden Codezeilen hinzu, so dass das SomeList_SelectedIndexChanged-Ereignis wie folgt aussieht:

private void SomeList_SelectedIndexChanged(object sender, System.EventArgs  
e) 
{ 
 OnDropDownChanged(e); 
}

Auch dieser Code wird Ihnen bekannt vorkommen. Wir rufen einfach das benutzerdefinierte Ereignis auf, sobald das SomeList-Steuerelement einen neuen Wert zurücksendet. Dieses Ereignis wird vom Web Form verarbeitet.

Wir werden nun das ReAction-Steuerelement einrichten. Klicken Sie im Server-Explorer mit der rechten Maustaste auf die Datei ReAction.ascx, und wählen Sie Designer anzeigen aus. Ziehen Sie ein Bereichs-Serversteuerelement der Registerkarte Web Forms in der Toolbox auf das Webbenutzer-Steuerelement. Nennen Sie den Bereich ReActionPanel. Ändern Sie die Beschriftung des Bereichs, in dem Sie den im Designer angezeigten Text markieren und den neuen Text an dieser Stelle eingeben. In diesem Beispiel wurde "ReAction User Control" verwendet.

Ziehen Sie ein Label-Steuerelement der Registerkarte Web Forms der Toolbox auf ReActionPanel. Konfigurieren Sie das Label-Steuerelement mit den folgenden Einstellungen:

Label1

EIGENSCHAFT

WERT

ID

SomeValue

Text

[blank]

Drücken Sie die Taste F7, um den Klassencode für das Webbenutzer-Steuerelement anzuzeigen. Fügen Sie unter dem Page_Load-Ereignis den folgenden Code hinzu.

public void AlertDropDownChanged(string NewText) 
{ 
SomeValue.Text = NewText + " " + DateTime.Now.TimeOfDay.ToString(); 
}

Da auf ein Ereignis reagiert wird und kein Ereignis ausgelöst wird, muss kein Delegat-Ergeignishandler angegeben werden. In diesem Steuerelement muss ein öffentliches Ereignis erstellt werden, das durch das Web Form ausgelöst werden kann. Die AlertDropDownChanged-Methode ändert einfach den Text der SomeValue-Beschriftung in die aktuelle Serversystemzeit. Wir übergeben nun die NewText-Zeichenfolge des Web Forms, um zu zeigen, dass Informationen sowohl an untergeordnete Steuerelemente als auch an übergeordnete Steuerelemente oder Formulare übergeben werden können.

Einrichten des Web Forms

Da jetzt alle Webbenutzer-Steuerelemente eingerichtet sind, fahren wir mit dem Web Form fort. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Default.aspx, und wählen Sie Designer anzeigen aus. Fügen Sie dem Entwurfsrahmen ein Panel-Steuerelement aus der Toolbox Web Forms hinzu. Nennen Sie den Bereich "MainPanel". Wenn Sie möchten, können Sie den Text im Bereich löschen.
Zeigen Sie den Klassencode für das Web Form an, in dem Sie die Taste F7 drücken. Fügen Sie unter dem Page_Load-Ereignis den folgenden Code hinzu.

private void setUpControls() 
{ 
 Control myActionControl = LoadControl("Action.ascx"); 
 MainPanel.Controls.Add(myActionControl); 
 // INSERT EVENT HANDLER HERE 
MainPanel.Controls.Add(new LiteralControl("<BR>")); 
Control myReActionControl = LoadControl("ReAction.ascx"); 
 myReActionControl.ID = "ReActionControl"; 
 MainPanel.Controls.Add(myReActionControl); 
}

Diese Methode wird jedes Mal aufgerufen, wenn die Seite geladen wird, um die beiden Webbenutzer-Steuerelemente zur Auflistung der Steuerelemente des MainPanel hinzuzufügen. Dieser Code ähnelt einer Methode, mit der normalerweise eine Portalwebanwendung erstellt wird. Er lädt ein Webbenutzer-Steuerelement ins Seitenobjekt, indem er auf dessen virtuellen Pfad und Dateinamen verweist. Es ist wichtig zu beachten, dass sich ein Webbenutzer-Steuerelement innerhalb der Anwendung eines Webprojekts befindet. Sie können nicht auf ein Webbenutzer-Steuerelement in einer anderen ASP.NET-Anwendung verweisen. Wenn Sie ein Steuerelement benötigen, das anwendungsübergreifend eingesetzt werden kann, sollten Sie ein benutzerdefiniertes Websteuerelement verwenden.

Control myActionControl = LoadControl("Action.ascx");

Die erste Anweisung der setUpControls-Methode erstellt ein Objekt vom Typ Steuerelement, indem ein Webbenutzer-Steuerelement in die Datei "Action.ascx" im Page-Objekt geladen wird. Wird ein Steuerelement auf diese Weise geladen, ist dies dasselbe, als würde es auf eine Entwurfsoberfläche gezogen, wie im ersten Beispiel. Aufgrund der "using System.Web.UI;"-Anweisung am Anfang der Codebehind-Datei des Web Forms gehört die LoadControl-Methode zur Page-Klasse.

MainPanel.Controls.Add(myActionControl);

Als Nächstes wird das Control-Objekt, myActionControl, der Controls-Auflistung des MainPanel-Steuerelements hinzugefügt. Wenn Sie nach Kombinationsanweisungen suchen, könnten Sie folgende Anweisung zum Laden und Hinzufügen von Control zur MainPanel verwenden.

MainPanel.Controls.Add(Page.LoadControl("Action.aspx"));

Der Nachteil hierbei ist, dass kein Control-Objekt instanziiert wurde. Wenn also für das Webbenutzer-Steuerelement eine Eigenschaft festgelegt oder eine Methode aufgerufen werden muss, muss nach der Controls-Auflistung von MainPanel gesucht werden, um das Objekt zu finden.

MainPanel.Controls.Add(new LiteralControl("<BR>"));

Die nächste Zeile fügt dem Bereich ein HTML-Literal-Steuerelement hinzu und legt einen Abstand zwischen die beiden Steuerelemente fest. Dieser Schritt ist nicht unbedingt erforderlich. Die Seite sieht jedoch schöner aus, wenn zwischen den Steuerelementen etwas Platz bleibt.

Im letzten Codeblock werden die Schritte wiederholt, die bereits erläutert wurden, um dem MainPanel das zweite Webbenutzer-Steuerelement hinzuzufügen. Es ist wichtig zu wissen, dass wir später im Programm auf dieses Objekt verweisen werden. Daher legen wir für eine einfache Suche die ID-Eigenschaft fest. Indem die ID-Eigenschaft des Steuerelements festgelegt wird, kann mithilfe der FindControl-Methode der Controls-Auflistung auf das Webbenutzer-Steuerelement verwiesen werden. Die ID wurde mit der folgenden Anweisung festgelegt.

myReActionControl.ID = "ReActionControl";

Jetzt muss in der Page_Load-Methode diese Methode aufgerufen werden. Fügen Sie der Page_Load-Methode die folgende Codezeile hinzu.

setUpControls();

Der Wert für IsPostBack wird hier nicht überprüft. Dieser Vorgang soll bei jedem Laden der Seite ausgeführt werden. Mit dem restlichen Teil wird sichergestellt, dass die Webbenutzer-Steuerelemente die Statusinformationen beibehalten, obwohl Sie bei jedem Sendevorgang an den Server neu geladen werden.

Fügen Sie unten in der Codebehind-Datei Default.aspx die folgende Methode hinzu. Dadurch wird das benutzerdefinierte Ereignis verarbeitet, das wir im Action.ascx-Webbenutzer-Steuerelement erstellt haben.

private void handleDropDownChanged(object sender, EventArgs e) 
{ 
ReAction myReActionControl =  
(ReAction)MainPanel.FindControl("ReActionControl"); 
if (myReActionControl != null) 
myReActionControl.AlertDropDownChanged("The DropDown Changed."); 
}

Zunächst verweisen wir auf das Webbenutzer-Steuerelement, indem wir die FindControl-Methode zusammen mit der ID-Eigenschaft verwenden, die wir für das Steuerelement festlegen. Erst danach wird das Steuerelement dem Bereich hinzugefügt. Es muss nur in C# sichergestellt werden, dass Control nicht Null ist. In VB.NET ist dieser Schritt nicht erforderlich. Nachdem das Reaction-Webbenutzer-Steuerelement gefunden wurde, wird die zuvor eingerichtete öffentliche Methode aufgerufen.

Denken Sie bei diesem Beispiel an die unterschiedlichen Arten von Informationen, die mit dieser Methode hätten gesendet werden können. Von einer Zeichenfolge bis hin zu einem DataSet-Objekt hätte jede Art von Information an das Webbenutzer-Steuerelement gesendet werden können. Wir hätten auch ein weiteres Webbenutzer-Steuerelement senden können! Diese Funktionalität ist wichtig für komponentenbasierte Webanwendungen, wie beispielsweise Informationsportale, bei denen Inhalte unabhängig voneinander agieren und Änderungen Auswirkungen auf mehrere Benutzersteuerelemente haben können.

Kehren Sie zur setUpControls-Methode zurück, die wir einige Schritte zuvor hinzugefügt haben. Suchen Sie nach dem Kommentar zum Hinzufügen des Ereignishandlers, den wir eingefügt haben. Ersetzen Sie den Kommentar durch diesen Code.

((Action)myActionControl).DropDownChanged += new  
Action.DropDownChangedHandler(this.handleDropDownChanged);

Unter Verwendung der Action-Klasse wird das Control-Objekt umgewandelt, um zum DropDownChanged-Ereignis zu gelangen. Indem es mit einem neuen DropDownChangedHandler gleichgesetzt und auf die handleDropDownChanged-Methode verwiesen wird, ist sichergestellt, dass auf jedes benutzerdefinierte Ereignis, das vom Action-Steuerelement ausgelöst wird, entsprechend reagiert wird.

Drücken Sie F5, um die Anwendung zu testen. Auf dem Bildschirm sollten beide Webbenutzer-Steuerelemente und ganz oben das Action-Steuerelement angezeigt werden. Versuchen Sie, eine andere Option im DropDownList-Steuerelement auszuwählen. Das Formular sollte automatisch senden, das Ereignis auslösen und die Bezeichnung im ReAction-Steuerelement ändern.

eventhandling_06

Bild 6

Zusammenfassung

In diesem Artikel wurde beschrieben, wie benutzerdefinierte Ereignisse von Webbenutzer-Steuerelementen ausgelöst werden. Außerdem wurde erläutert, wie die Ereignisse auf der Web Form-Ebene verarbeitet und an ein anderes Webbenutzer-Steuerelement weitergegeben werden.

Um die Vorgänge besser zu verstehen, können Sie das Beispiel noch einmal durchgehen und versuchen, die benutzerdefinierten Ereignisse für die Verarbeitung unterschiedlicher Argumenttypen einzurichten. Versuchen Sie, das DropDownList-Steuerelement des Action-Webbenutzer-Steuerelements zu übergeben und dem ReAction-Steuerelement hinzuzufügen, nachdem das Ereignis ausgelöst wurde. Durch das Hinzufügen von Webbenutzer-Steuerelementen zur Laufzeit können Sie portalbasierte Webanwendungen erstellen, bei denen verschiedene Steuerelemente unabhängig voneinander auf Benutzereingaben reagieren können.


Anzeigen:
© 2015 Microsoft