Im Beitrag „AutoComplete in Textfeldern“ in der vorherigen Ausgabe von Access im Unternehmen haben wir eine Lösung vorgestellt, mit der Sie Textfelder um eine AutoComplete-Funktion erweitern können. Dort haben wir uns die grundlegenden Techniken angesehen, im vorliegenden Beitrag kümmern wir uns darum, dieses Tool in eine Form zu bringen, die wir einfach und schnell einem Textfeld hinzufügen können. Und das, ohne den Code für jedes Textfeld erneut in die Klassenmodule der Formulare kopieren zu müssen.
Autocomplete-Klasse
Wenn wir eine nützliche Funktion herauskristallisiert haben, nutzen wir in der Regel ein Klassenmodul, um den entstandenen Code zusammenzufassen und diesen wiederverwendbar zu machen, ohne dass er jedes Mal in die jeweiligen Module hineinkopiert werden muss. Das Klassenmodul muss dann ein paar private Variablen bieten, die über öffentliche Eigenschaften gefüllt oder gelesen werden können und welche die Informationen für den Ablauf der Funktion bereitstellen.
Also erstellen wir zunächst ein neues Klassenmodul namens clsAutoComplete.
Für die Umsetzung der AutoComplete-Funktion in der Klasse benötigen wir drei Informationen:
- Einen Verweis auf das Textfeld, welches wir mit der AutoComplete-Funktion ausstatten wollen,
- den Namen der Tabelle, aus der die Daten für AutoComplete stammen und
- den Namen des Feldes, welches diese Daten enthält.
Dafür fügen wir der Klasse zunächst die folgenden privat deklarierten Variablen hinzu:
Private WithEvents m_Textbox As TextBox Private m_Table As String Private m_Field As String
Die Objektvariable m_Textbox versehen wir mit dem Schlüsselwort WithEvents. Damit legen wir die Grundlage dafür, dass wir innerhalb des Klassenmoduls auch Ereignisprozeduren für das Textfeld implementieren können.
Öffentliche Eigenschaften
Damit wir etwa bei Öffnen des Formulars mit dem auszustattenden Textfeld die notwendigen Informationen an das neu erstellte Objekt auf Basis dieser Klasse übermitteln können, benötigen wir drei entsprechende öffentliche Eigenschaften. Diese bilden wir mit Property Set– beziehungsweise Property Let-Prozeduren ab. Erstere sind für Objektvariablen geeignet, zweitere für einfache Variablen wie Text- oder Zahlenfelder. Die Tabelle und das Feld erfassen wir mit solchen Property Let-Prozeduren:
Public Property Let Table(str As String) m_Table = str End Property Public Property Let Field(str As String) m_Field = str End Property
Die Property Set-Prozedur für die Eigenschaft TextBox hat noch eine zusätzliche Anweisung:
Public Property Set TextBox(txt As TextBox) Set m_Textbox = txt With m_Textbox .OnKeyPress = "[Event Procedure]" End With End Property
Die Zuweisung des Wertes [Event Procedure] zur Eigenschaft OnKeyPress teilt dem Klassenmodul mit, dass es nach einer Implementierung des Ereignisses KeyPress für das Textfeld aus m_Textbox suchen soll, wenn der Benutzer dieses Ereignis auslöst.
Durch diese Vorbereitung finden Sie im linken Kombinationsfeld des Codefensters für das Klassenmodul clsAutoComplete den Eintrag m_TextBox. Haben Sie diesen ausgewählt, erscheint automatisch die Ereignisprozedur m_Textbox_BeforeUpdate – das ist die Standardereignisprozedur für diesen Steuerelementtyp. Wir benötigen aber das Ereignis KeyPress, das wir danach im rechten Kombinationsfeld auswählen (siehe Bild 1). Unten sehen Sie die danach erscheinende Ereignisprozedur.
Bild 1: Hinzufügen der Ereignisprozedur für das Ereignis KeyPress
Diese brauchen wir dann nur noch mit dem Code zu füllen, den wir im oben genannten Beitrag im KeyPress-Ereignis für die jeweilige Schaltfläche programmiert haben – nebst einigen Anpassungen. Natürlich müssen wir alle Verweise auf das Textfeld und den Namen der zu verwendenden Tabelle samt Feld durch unsere drei Variablen m_Textbox, m_Table und m_Field ersetzen. Das Ergebnis sieht dann wie in Listing 1 aus.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo