17.4 Ein Steuerelement von einem vorhandenen ableiten
Ein zusammengesetztes Steuerelement leiten Sie wie im vorigen Abschnitt gezeigt von der Klasse UserControl ab. Wollen Sie ein vorhandenes Steuerelement um weitere Funktionalitäten ergänzen, leiten Sie es einfach von dem am besten passenden Steuerelement ab. Die geerbten Eigenschaften, Methoden und Ereignisse können Sie so überschreiben, dass das neue Steuerelement Ihren Erwartungen entspricht.
An einem kleinen Beispiel möchte ich Ihnen diese Technik zeigen. Dazu wird die Klasse TextBox abgeleitet, um ein neues Steuerelement bereitzustellen, das nur Zahleneingaben entgegennimmt. Das neue Steuerelement heißt NumericTextbox. Soll das Steuerelement mehreren Anwendungen zur Verfügung gestellt und weiterverteilt werden, muss es als DLL-Datei kompiliert werden. Sie können entweder ein Projekt vom Typ Klassenbibliothek oder Windows-Steuerelementbibliothek wählen. Letzteres ist empfehlenswerter, weil sofort alle notwendigen Namensräume eingebunden werden. Allerdings muss die Angabe der abgeleiteten Basisklasse von UserControl in den gewünschten Typ geändert werden – in unserem Beispiel also TextBox.
Public Class NumericTestbox : Inherits TextBox
Da das neue Steuerelement nur Zahleneingaben akzeptieren soll, muss die geerbte Methode OnKeyPress überschrieben werden, deren zweiter Parameter vom Typ KeyPressEventArgs in seiner Eigenschaft KeyChar das Zeichen der gedrückten Taste liefert.
Die Zahlen 0 bis 9 entsprechen den ASCII-Werten 47 bis 57. Lassen wir nur diese Werte zu, wäre es dem Anwender nicht möglich, mit der -Taste ein Zeichen zu löschen. Der Wert 8 beschreibt diese Taste und sollte in jedem Fall ebenfalls zugelassen werden, während alle anderen Tasten unterdrückt werden.
'...\Steuerelemente\Eigene\NumericTextbox.vb |
<ToolboxBitmap("NumericTextBox.bmp")> _
Public Class NumericTextbox : Inherits TextBox
Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs)
' registrierte Ereignishandler aufrufen
MyBase.OnKeyPress (e)
Dim input As Integer = Convert.ToInt32(e.KeyChar)
If (input >= 47 AndAlso input <= 57) OrElse (input = 8) Then Return
e.Handled = True
End Sub
End Class
Wir dürfen nicht vergessen, die gleichnamige Methode in der Basisklasse aufzurufen. Sonst wird dem Anwender des Steuerelements NumericTextbox zwar das Ereignis KeyPress angeboten, aber die registrierten Ereignishandler werden nicht ausgeführt.
Passen Sie mit Attributen das Verhalten des neuen Steuerelements zur Entwicklungs- und Laufzeit nach Bedarf an (siehe Abschnitt 17.3.3, »Attribute eines Benutzersteuerelements«). Unsere abgeleitete Textbox hat, um ihr auch eine ansprechende und leicht zu identifizierende Präsentation in der Toolbox zu geben, eine individuelle Toolbox-Bitmap, die mit einem Attribut vor dem Klassenbezeichner bekannt gegeben wird.
Nach dem Kompilieren liegt eine DLL-Datei vor. Sie können NumericTextbox benutzen, nachdem Sie es über das Kontextmenü der Toolbox dieser hinzugefügt haben. Gehen Sie dazu auf die Schaltfläche Durchsuchen, und wählen Sie die DLL-Datei.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.