VB-Homepage Tipp 338

Intelligente Textboxen

Ich hätte diesen Tipp auch genau so gut "Benutzerfreundliche" oder "Zeitsparende" Textboxen nennen können. Um was es geht, ist der Vergleich der Eingabe des Users in eine Textbox, entweder mit einer Liste von möglichen Eingaben, soweit dies bekannt ist oder der Vergleich mit allen bisherigen Eingaben in diese Textbox.

Im vorliegenden Demoprojekt ist der Textbox eine einfache Textdatei zugeordnet, die bei jeder Tastatureingabe des Users überprüft, ob es in der Textdatei ein Wort gibt, das dem bisher eingegebenen Text des Users entspricht.

Der Kern des Ganzen bildet hier eine Prozedur von M.Warm.

Dazu wird im KeyPress Ereignis der entsprechenden Textbox diese Prozedur aufgerufen.

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
   'Enter - Abschluß der Eingabe
   'hier könnte ein neues Wort in Datei bzw. Array aufgenommen werden
   Text1.Locked = True
   'MsgBox "Ihr Text lautet : " & Text1.Text
Else
   AutoComplete Text1, KeyAscii
End If

End Sub

'(Übergabe des Namens der Textbox und des KeyAscii Wertes der aktuellen Eingabe)

Private Sub AutoComplete(tb As TextBox, KeyAscii As Integer)
Dim c%, t%, a$, b$

If KeyAscii >= 32 Then
  With tb
    c = .SelStart + 1
    a = .Text & Chr(KeyAscii)
    If c >= 3 And c = Len(a) And .SelLength = 0 Then
         
         'Die Werte aus der Textdatei wurden zum Programmstart in ein Array
         'eingelesen, so kann man schneller vergleichen (1)
         For t = 0 To 5999

              b = MeinArray(t)
              If Len(b) >= c Then
                  b = Left(b, c)
                  If a = b Then
                      KeyAscii = 0
                      'Beep 'soller piepen oder nicht?
                      .Text = MeinArray(t)
                      .SelStart = c
                      .SelLength = Len(.Text) - c
                      .Refresh
                      Exit For
                  End If
              End If
         Next t

    ElseIf .SelLength > 0 Then

        If Chr(KeyAscii) = Mid(.Text, c, 1) Then
            .SelStart = .SelStart + 1
            .SelLength = Len(.Text) - .SelStart
            KeyAscii = 0
        End If
    End If
  End With
End If

End Sub

Und zum besseren Verständnis,
gibt es hier noch das gesammte Projekt zum Download.
(Aus Platzgründen enthält die Textdatei nur Wortdefinitionen A und B)



Quelle : M.Warm / www.info2.fh-dortmund.de/info2/hpages/yolanda/vb5.htm

Zurück zur Übersichtsseite