Problem: Textfeld nur bestimmte Zeichen

wewa

Mitglied
Hallo!

Zunächst geht es einmal um Visual Basic 6. Da stehe ich vor einem kleinen Problem.
Und zwar verhindere ich mit folgendem Code, dass in einem Textfeld (für Pin) etwas anderes als Zahlen (und davon maximal 4) eingegeben wird.
Code:
Private Sub txtpin_KeyPress(KeyAscii As Integer)
    If InStr("0123456789" + Chr(8), Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
    End If
   
    If Len(txtPin.Text) >= 4 And KeyAscii <> 8 Then
        KeyAscii = 0
    End If
End Sub
Das Problem ist nun, man kann in diesem Textfeld nun keine Zahlen mit Strg+C und Strg+V eingügen. Auch kann nun in diesem Textfeld nichts überschreiben werden, wenn schon 4 Zahlen drin stehen.

Wie kann ich diese beiden Sachen ermöglichen?

PS: Das ASCII zu 8 ist Backspace, damit man auch etwas entfernen kann.
 
Ich würde den Text lieber im Change-Ereignis prüfen, z.B. so:

Code:
Private Sub Text1_Change()
   Dim i As Integer
   Dim k As Integer
   Dim CP As String
   Dim NewStr As String
   NewStr = ""
   k = Text1.SelStart
   For i = 1 To Len(Text1.Text)
      CP = Mid$(Text1.Text, i, 1)
      If CP >= "0" And CP <= "9" Then
         NewStr = NewStr + CP
      End If
   Next
   Text1.Text = NewStr
   Text1.SelStart = k
End Sub

Grüsse
ronaldh
 
Danke das funktioniert einmal.

Doch nun habe ich versucht diesen Code so zu modifizieren, dass man auch Zahlen (auch negativ mit Komma) eingeben kann.
Code:
   Dim i As Integer
   Dim k As Integer
   Dim CP As String
   Dim NewStr As String
   NewStr = ""
   k = txtOben.SelStart
   For i = 1 To Len(txtOben.Text)
      CP = Mid$(txtOben.Text, i, 1)
      If (CP >= "0" And CP <= "9" Or InStr(".-", CP)) And Len(txtOben.Text) <= 4 Then
         NewStr = NewStr + CP
      End If
   Next
   txtOben.Text = NewStr
   txtOben.SelStart = k

Hier stellen sich mir aber ein paar Probleme. Wenn der Text länger als 4 Zeichen ist, dann wird der ganze Inhalt des Textfeldes gelöscht auch weiß ich nicht wie ich verhindern kann, dass die Zahl wirklich so "-234.34" und nicht so "23-34.234.34" aussieht.
 
Da kannst Du den Text natürlich weiter analysieren. Zum Beispiel muss das Minus-Zeichen immer das erste Zeichen sein, ansonsten wird es abgelehnt. Zum Zweiten musst Du prüfen, ob mehrere Punkte vorkommen, dass geht dann natürlich auch nicht. Die Instr-Funktion hat auch die Möglichkeit, einen Start-Punkt zu setzen, z.B.

Code:
    i = Instr(Tx, ".")
    If i > 0 then
        k = Instr(i + 1, Tx, ".")
        If k > 0 Then
           Tx = Left(Tx, k-1)
        End If
    End If

Dass der ganze Text gelöscht wird, wenn Du über 4 Zeichen kommst, ist logisch, weil dann die Variable NewStr nie gefüllt wird. Deshalb solltest Du die Len-Abfrage aus der Schleife raus nehmen, und stattdessen nach der Schleife einfügen:

Code:
    NewStr = Left(NewStr, 4)

Im Übrigen solltest Du am A noch mit der Replace-Funktion eventuell eingegebene Komma gegen Punkte ersetzen, falls jemand den Dezimal-Punkt mit dem Nummernblock eingibt.

Grüsse
ronaldh
 
Zurück