Hallo!
Ich will eine ganz kleine Datenbank in
VB5 programmieren und dabei habe ich ein
DBCombo Feld verwendet das die Daten
einer ganzen Spalte der Datenbank-Tabelle
enthält. Soweit war es mal kein Problem.
Nun will ich aber, wenn ich ein wort
beginne einzutippen, daß automatisch nach
einem passenden Wort in der Liste gesucht
wird und angezeigt. Mit der Eigenschaft
‚MatchEntry‘ wird in der Liste nach dem
Wort gesucht, aber ich will, daß es so
ähnlich wie in dem Adresseingabefeld
eines www-Browsers aussieht. Wenn ich den
Anfang eines Wortes eingebe, wollte das
Programm das Ende des gefundenen Wortes
markiert anzeigen. So wie man es eben oft
in gängigen Programmen findet…
Ich habe eine IntelliCombobox in einem VB-Projekt von mir folgendermaßen realiesiert:
(dbcTitel = DBCombobox
rsCopyLiteratur = Kopie des Recordsets, der die gewünschten Daten enthält)
Grüße, Tanja
Private Sub dbcTitel_Change()
On Error GoTo ErrorTrap
Dim IntelliText As String
IntelliText = dbcTitel.Text
’ InDBCSearch_Change verhindert, dass es zu rekursiven Aufrufen kommt.
’ Wenn InDBCSearch = True, also wenn dbcSearch_Change() bereits aufgerufen wurde,
’ wird dbcSearch_Change() sofort wieder verlassen.
If InDbcSearch_Change Then Exit Sub
InDbcSearch_Change = True
’ In folgenden Faellen wird die Funktion verlassen:
’ - wenn IntelliText= „“
’ - wenn der alte IntelliText gleich der neue ist (wichtig wegen der Auswahl).
’ Wenn man die Auswahl ueberschreibt, dann wird Change zweimal aufgerufen:
’ einmal fuer das Loeschen der Auswahl (dann ist der alte IntelliText gleich der neue)
’ und dann nochmal, wenn das neue Zeichen dazukommt (dieser Fall wird dann bearbeitet),
’ dabei nicht auf Gross/Kleinschreibung achten.
If (StrConv(OldText, vbUpperCase) = StrConv(IntelliText, vbUpperCase)) Or (Len(IntelliText) = 0) Then
InDbcSearch_Change = False
Exit Sub
End If
’ StrConv(String, vbUpperCase)
’ Gibt einen Wert vom Typ Variant (String) zurück.
’ String: String, der umgewandelt werden soll.
’ vbUpperCase: Wandelt die Zeichenfolge in Großbuchstaben um.
Dim TextLength As Integer
’ Length of the combobox text
TextLength = Len(IntelliText)
rsCopyLiteratur.MoveFirst
Dim Finish As Boolean
Finish = False
Do
’ Compares combobox text to database column
If (StrConv(IntelliText, vbUpperCase) = StrConv(Left(rsCopyLiteratur.Fields(„Titel“).Value, TextLength), vbUpperCase)) Then
dbcTitel.Text = rsCopyLiteratur.Fields(„Titel“).Value 'Text setzen
dbcTitel.SelStart = TextLength 'Text, der hinzugefuegt wurde markieren
dbcTitel.SelLength = Len(dbcTitel.Text) - TextLength
Finish = True
End If
’ The SelStart property returns or sets the starting point of text selected;
’ indicates the position of the insertion point if no text is selected.
’ The SelLength property returns or sets the number of characters selected.
rsCopyLiteratur.MoveNext
’ Bei EOF muß Schleife verlassen werden (Eintrag im Recordset ist bei EOF ungueltig).
If rsCopyLiteratur.EOF Then Finish = True
Loop While (Finish = False)
OldText = IntelliText
InDbcSearch_Change = False
ErrorTrap:
If Err.Number 0 Or (Err.Number > 2420 And Err.Number