10.2 Benutzerdefinierte Steuerelemente (Custom Controls)
 
Benutzersteuerelemente sind Ausschnitte aus aspx-Seiten und mischen dementsprechend HTML- und Skript-Anteile. Im Unterschied dazu sind benutzerdefinierte Steuerelemente Klassen, die ausschließlich auf der Basis von VB.NET- beziehungsweise C#-Code aufgebaut werden.
Unter ASP.NET haben Sie verschiedene Möglichkeiten, eigene Steuerelemente zu entwickeln. Die Dokumentation nennt drei prinzipielle Möglichkeiten.
|
Wenn Sie ein vorhandenes Webserversteuerelement um einige Merkmale erweitern möchten, dann können Sie ein eigenes Steuerelement von dieser Basisklasse ableiten und lediglich die zusätzlich gewünschten Merkmale ergänzen. |
|
Sie können mehrere Steuerelemente zu einem zusammengesetzten Steuerelement verbinden. |
|
Sie können ein völlig eigenes Steuerelement entwickeln, indem Sie eine Klasse beispielsweise von der Basisklasse Control direkt ableiten und alle Funktionen selbst programmieren. |
Je nach Aufgabenstellung kann die Entwicklung von benutzerdefinierten Steuerelementen sehr komplex werden. Im Rahmen dieses Buches möchte ich lediglich demonstrieren, wie Sie ein eigenes Steuerelement von einem vorhandenen Webserversteuerelement ableiten können. Als einfaches Beispiel soll eine Schaltfläche dienen, die auf ihrer Beschriftung anzeigt, wie oft sie angeklickt wurde.
10.2.1 Eine zählende Schaltfläche
 
zaehlbutton01.vb enthält den Code für die Klasse, die die zählende Schaltfläche realisiert.
Zunächst müssen Sie hier mit einigen Imports-Befehlen die benötigten Namensräume einbinden.
Imports System
Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.WebControls
Als Nächstes müssen Sie auf jeden Fall einen eigenen Namensraum angeben. Das Beispiel verwendet die Bezeichnung meineControls. Die Klasse für Ihr eigenes Steuerelement muss innerhalb dieses Namensraums liegen.
Namespace meineControls
' ...
End Namespace
Die Klasse für die zählende Schaltfläche leiten Sie von der Basisklasse Button ab, so dass sich diese Signatur ergibt:
Public Class zaehlbutton
Inherits System.Web.UI.WebControls.Button
' ...
End Class
Im Konstruktor geben Sie die Beschriftung der Schaltfläche an. Außerdem merken Sie sich im ViewState, dass die Schaltfläche bislang noch nicht aufgerufen wurde, vergeben also den Zähler 0.
Public Sub New()
Me.Text = "0-mal angeklickt"
ViewState("AnzahlClicks") = 0
End Sub
Die Funktionalität selbst, dass die Schaltfläche beim Anklicken ihre Beschriftung ändert und die Anzahl der Klicks mitzählt, realisieren Sie, indem Sie die Ereignisprozedur für das Click-Ereignis überschreiben. Innerhalb der Methode OnClick inkrementieren Sie den im ViewState gespeicherten Zähler, definieren die Beschriftung neu und reichen das Click-Ereignis anschließend zur weiteren Bearbeitung an die OnClick-Methode der Basisklasse weiter.
Die Klasse zaehlbutton01.vb hat damit insgesamt diese Form:
' zaehlbutton01.vb
Imports System
Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace meineControls
Public Class zaehlbutton
Inherits System.Web.UI.WebControls.Button
Public Sub New()
Me.Text = "0-mal angeklickt"
ViewState("AnzahlClicks") = 0
End Sub
Protected Overrides Sub OnClick _
(ByVal e As EventArgs)
ViewState("AnzahlClicks") = _
CInt (ViewState("AnzahlClicks")) + 1
Me.Text = CStr(ViewState("AnzahlClicks")) _
& "-mal angeklickt"
MyBase.OnClick(e)
End Sub
End Class
End Namespace
Dann stellt sich die Aufgabe, diese selbst erstellte Klasse zu kompilieren. Der Aufruf für den Kommandozeilencompiler lautet:
vbc /t:library /out:zaehlbutton01.dll zaehlbutton01.vb /r:System.dll /r:System.Web.dll
Mit /t:library geben Sie an, dass eine dll-Datei (und keine exe-Datei) erstellt werden soll. Mit /out:zaehlbutton01.dll definieren Sie den Namen der zu erstellenden Datei. Anschließend nennt zaehlbutton01.vb den Namen der Quelldatei. Mit /r:System.dll und /r:System.Web.dll geben Sie die benötigten Verweise an.
Der Compiler erstellt die Datei zaehlbutton01.dll. Diese dll-Datei kopieren Sie anschließend in das /bin-Verzeichnis Ihrer Webanwendung.
zaehlbutton01.aspx ruft das selbst erstellte Steuerelement auf.
<!-- zaehlbutton01.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ Register TagPrefix="mlohrer"
Namespace="meineControls"
Assembly="zaehlbutton01" %>
<html><head><title>Zähl-Button</title></head>
<body>
<h3>Gezählt!</h3>
<form runat="server">
<mlohrer:zaehlbutton runat="server" />
</form></body></html>
In der aspx-Seite müssen Sie das selbst erstellte Steuerelement zunächst mit der Register-Direktive registrieren. Mit dem Attribut TagPrefix legen Sie ein Präfix fest, das Sie innerhalb der aspx-Seite für Ihr eigenes Steuerelement verwenden. Mit dem Attribut Namespace geben Sie den Namensraum an, den Sie innerhalb der VB-Datei festgelegt haben. Mit dem Attribut Assembly geben Sie den Namen der dll-Datei an, die Ihr selbst erstelltes Steuerelement enthält.
Abbildung 10.3 zeigt die Darstellung im Browser. Jedes Mal, wenn die Schaltfläche angeklickt wird, zählt sie in der Beschriftung mit.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 10.3 Das selbst erstellte Steuerelement zählt, wie oft es angeklickt wurde.
|