PDA

Vollständige Version anzeigen : Zeichenlänge sofort nach Tippen anzeigen lassen


fredchen
23.10.2007, 02:18
Hallo.
Habe ein ungebundenes textfeld1 , in dass ich einen Text tippen will. Nach, bei oder auf jedem Tastendruck soll in einem anderen textfeld2 angezeigt werden, wieviel Zeichen mein 1. Textfeld hat.
Ich will also beim Tippen sehen, wieviel Zeichen ich noch Platz habe.
Sprich: Nach jedem Tippen soll sich der Wert in dem zweiten Textfeld entsprechend erhöhen.
Mal abgesehen davon das ich nicht weiß, wie ich j e d e s Zeichen abfange, habe ich es mit mal mit dem Space-Zeichen probiert und folgenden Code eingesetzt:
If KeyAscii = vbKeySpace Then
Me.textfeld2 = Len(Me.textfeld1)
Me.textfeld2.Requery
End If
Doch das klappt nicht. Erst wenn ich das Feld verlasse wird textfeld2 neu berechnet.
In dem Formular habe ich Tastenvorschau auf JA gestellt.

Daher die Frage: Wie kann ich 1. jedes Zeichen abfangen und 2. nach jedem Tippen die Zeichenlänge anzeigen lassen?
Danke für Tipps.

MRR
23.10.2007, 05:07
Und wie ist es mit dem "Bei Änderung"-Event?
Dort könntest du unterbringen:
Textfeld2.Value = "Es wurden bereits " & Textfeld1.Text & " Zeichen eingegeben."
(oder was auch immer gemacht werden soll - sprich: wie sich die Anzahl der noch verfügbaren Zeichen ermitteln soll...)

bofspb
23.10.2007, 06:17
Moin.

Die Value-Eigenschaft und AfterUpdate hilft Dir in dem Moment wohl nicht weiter.

Versuch's mal so:

Private Sub DeinTextFeld1_KeyUp(KeyCode As Integer, Shift As Integer)
Me.DeinTextfeld2 = Len(Me.DeinTextFeld1.Text)
End Sub

Lanz Rudolf
23.10.2007, 08:12
Hallo
möglich das Dir das auch etwas Hilft:
Eingabe-Felder in einem Formular

Textfelder enthalten ein Feature (leider undokumentiert), dass Leerzeichen am Ende eines eingegebenen Textes entfernt werden. Wenn also nur Leerzeichen eingegeben werden, dann hat das Feld beim Verlassen den Inhalt NULL. Im Ereignis Feldname_BeforeUpdate jedoch ist es noch mit den Leerzeichen gefüllt.

Die Lösung ist also, eine Variant-Variable im Ereignis Before_Update zu füllen, dann diese zum weiter verarbeiten zu verwenden.

Option Compare Database
Option Explicit
Dim VarInW1 As Variant
Private Sub w1_BeforeUpdate(Cancel As Integer)
VarInW1 = Me!w1.Text
Debug.Print "Me!w1 : "; Len(Me!w1); " >"; Me!w1; "<"
Debug.Print "VarInW1: "; Len(VarInW1); " >"; VarInW1; "<"
End Sub
Eingabe von: >1 3 4..........< ’ 10 Leerzeichen am Ende (ohne > <)
Resultat:
Me!w1 : 5 >1 3 4<
VarInW1 : 15 >1 3 4..........<
Achtung -> . = Leerstelle

Prian0815
23.10.2007, 08:42
Hi, Also ich nehm hierzu das 'BeiÄnderung'-Event, in dem Fall um die Eingabe auf 3 Zeichen zu begrenzen. Mit Len(String) stellst du die Länge des Strings fest.


Private Sub txtAbtKoswert_Change()
On Error GoTo Err_txtAbtKoswert_Change
str = txtAbtKoswert.Text
l = Len(str)
If l = 3 Then
txtAbtKoswert.Value = str
txtAbtKoswert.Locked = True
txtAbtKoswert.BackColor = 12632256
Else
txtAbtKoswert.BackColor = 16777215
txtAbtKoswert.Locked = False
End If

Err_txtAbtKoswert_Change:
If Err.Number <> 0 Then
MsgBox Err.Number & " " & Err.Description & " " & "Form!frmAbteilung - txtAbtKoswert_Change"
Resume Exit_txtAbtKoswert_Change
End If

Exit_txtAbtKoswert_Change:
Exit Sub
End Sub

Lanz Rudolf
23.10.2007, 09:05
Hallo
@Armin Wo und wie sind L und str Definiert ?

bofspb
23.10.2007, 10:09
@Prian
als Anmerkung:
Hatte sowas schon mal gemacht, hab mich dabei aber am KeyDown-Ereignis angehängt. Warum? Was passiert denn, wenn drei Zeichen drinstehen, der User aber feststellt, dass er sich verschrieben hat? Also lieber

Wenn länge = 3 und Taste nicht "entf" oder "Del" dann KeyCode=0. fertig. Ist imho auch einfacher ;)

fredchen
23.10.2007, 15:14
Hallo. Also das hier klappt wunderbar, danke.
Private Sub DeinTextFeld1_KeyUp(KeyCode As Integer, Shift As Integer)
Me.DeinTextfeld2 = Len(Me.DeinTextFeld1.Text)
End Sub
Jetzt wäre nur noch die Frage, wie ich alle Tasten abfange und nicht nur die Shift-Taste, die ja als Integer in der Funktion übergeben wird.

Wenn ich abfragen wollte
If KeyAscii >=0 Then ...
werden dann wirklich alle Tasten interpretiert?

Nachtrag:
Sorry, irgendwie klappt es doch das alle Tasten berücksichtigt werden. Dachte nur bei der Shift-Taste. Wie kommt das?