Die "AutoComplete"-Funktion kennt man i.a.R. nur vom Internet-Explorer - genauer gesagt von der Adresszeile, bei der versucht wird, die Eingabe automatisch zu vervollständigen. Eine solche Funktion lässt sich sehr leicht auch für ein normales Text-Eingabefeld nachbauen, wobei die Inhalte in unserem Beispiel in einer Datenbank gespeichert sind. Nehmen wir an, Sie verwalten eine große Provisionsdatenbank mit sehr vielen Vertretern. Wird ein neuer Auftrag geschrieben, geben Sie in einer Textbox zunächst den Namen des Vertreters ein. Jetzt wäre es doch schön, wenn das Programm bereits während der Eingabe versucht, den Namen zu "erraten", indem es in der Datenbank nach dem bisher eingegebenen Anfangsnamen sucht, und Ihre Eingabe autom. vervollständigt. Also - worauf warten wir noch Nehmen wir an, der Name ist in der Datenbank in zwei Feldern gespeichert - "Name" und "Vorname". Hier der Code Option Explicit ' Datenbank-Objektvariablen Private Db As Database Private Rs As Recordset Beim Laden der Form öffnen wir die Datenbank und erstellen das Recordset - und zwar als Dynaset, da wir dann eine Suchanfrage bequem über die FindFirst-Methode starten können. Private Sub Form_Load() ' Datenbank öffnen Set Db = DBEngine.OpenDatabase(App.Path & "\VERTRETER.MDB") ' Recordset öffnen (Dynaset) Set Rs = Db.OpenRecordset("Vertreter", dbOpenDynaset) End Sub Um die Eingabe des Vertreter-Namens automatisch vervollständigen zu können, müssen wir im Change-Event der TextBox nach dem ersten Eintrag suchen, der mit der bisherigen Eingabe übereinstimmt. Wird ein Eintrag gefunden, so vervollständigen wir die bisherige Eingabe und markieren genau diesen Teil der Eingabe, so dass der durch das Programm vervollständigte Rest beim nächsten Tastendruck überschrieben wird - ganz wie unser Vorbild - die Adresszeile des Internet Explorers. ' Eingabe autom. vervollständigen Private Sub txtVertreter_Change() Dim SQL As String Dim lPos As Long Dim sName As String Dim sVorname As String Dim sPos As Long With txtVertreter If Trim$(.Text) = "" Or _ .Tag = "NoAction" Then Exit Sub ' aktuelle Eingabeposition merken sPos = .SelStart ' Komma vorhanden? lPos = InStr(.Text, ",") If lPos > 0 Then sName = Left$(.Text, lPos - 1) sVorname = Trim$(Mid$(.Text, lPos + 1)) Else sName = .Text: sVorname = "" End If ' SQL-Kommando erstellen If sVorname = "" Then SQL = "Name LIKE '" & sName & "*'" Else SQL = "Name = '" & sName & "' AND " & _ "Vorname LIKE '" & sVorname & "*'" End If ' Abfrage! Rs.FindFirst SQL If Not Rs.NoMatch Then ' Eintrag gefunden! .Tag = "NoAction" ' Vollständigen Namen in die TextBox schreiben .Text = Rs("Name") & ", " & Rs("Vorname") ' Eingabe markieren: von der aktuellen ' Eingabeposition bis zum Ende der Eingabe .SelStart = sPos .SelLength = Len(.Text) - sPos .Tag = "" End If End With End Sub Wird die Form geschlossen, schließen wir die Datenbank und setzen die Objektvariablen zurück: Private Sub Form_Unload(Cancel As Integer) ' Datenbank schlißen Rs.Close Db.Close Set Rs = Nothing Set Db = Nothing End Sub Dieser Tipp wurde bereits 21.590 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats Oktober 2024 Heinz Prelle Firewall-Status unter WinXP/Vista prüfen Das Beispiel prüft, ob die Firewall unter Windows XP/Vista eingeschaltet ist oder nicht. Zudem wird eine Abfrage durchgeführt ob es sich bei dem zugrundeliegenden Betriebssystem um Windows XP/Vista handelt oder nicht. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |