PDA

Vollständige Version anzeigen : Anzahl von Zeichen in einem Textfeld


melodoi@t-online.de
25.09.2003, 21:46
Hallo,
ich möchte die Anzahl von Zeichen, die der Nutzer in ein Textfeld eintragen darf auf 250 begrenzen. Diese Formatierung mit aaaaaa...;;" " oder alle ähnlichen finde ich furchtbar, weil man im Text dann nur schwer editieren kann. Ich habe mal so was gesehen mit 'Anzahl' und 'Max', kriege es aber nicht mehr zusammen. Das Key-Ereignis greift auch nicht, da ich innerhalb des Ereignisisses nicht auf den Feldinhalt zurückgreifen kann. Hast Du eine Idee?
Gruß Sylvio

jadatcoder
25.09.2003, 22:02
Hallo Sylvio,

es könnte im Ereignis 'BeforeUpdate' Deines Textfeldes funktionieren:

Dim myMax as integer
Dim myAnzahl as integer
'die Variablen können auch GLOBAL in einem Modul deklariert werden,
'dann kannst Du im gesamten Projekt darauf zugreifen

myMax=250
myAnzahl = Len(Dein_Textfeld)

if myAnzahl > myMax then
msgbox "Der Text ist zu lang", vbokonly, "Hinweis"
end if

Der Code-Schnipsel ist ungetestet.

TIPP:
Benutze keine reservierten Worte wie MAX oder ANZAHL als Variablen-
bezeichnung. MAX und ANZAHL sind z.B. Aggregatfunktionen in einer
Abfrage.

melodoi@t-online.de
26.09.2003, 06:34
Hallo Henner,
danke für den Tip, aber das funktioniert erst nachdem der Benutzer zu viel Text erfasst hat. Er sollte aber während des Schreibens die Mahnung erhalten, wenn genau 250 Zeichen geschrieben wurden.
Sylvio

ThomasLG
26.09.2003, 07:32
Soll die Mahnung gleich kommen, wenn 250 Zeichen eingegeben sind, oder erst, sobald versucht wird, das 251. Zeichen einzutippen?

Morli
26.09.2003, 07:39
Private Sub Text5_Change()
MsgBox Len(Me.Text5.Text)
End Sub

Der Code würde Dir bei jedem Tastenanschlag im Control Text5 die Länge des Textes anzeigen.

Morli

jadatcoder
26.09.2003, 08:08
Hallo Sylvio,

dann hat Morli den korrekten Tipp.
Das Change-Ereignis tritt bei (nach) jedem Tastendruck auf.

melodoi@t-online.de
26.09.2003, 17:24
Hallo,
das klappt ja leider nicht, weil das Ergebnis immer Null ist oder sich nicht ändert, so lange der Feldinhalt nicht gespeichert wird. Das siehst Du mit der Funktion auch:

Private Sub Inhalt_Change()
Debug.Print Len(Me!Inhalt)
End Sub

Ich habe aber gerade eine andere Lösung gefunden:

Public intInhalt As Integer

Private Sub Inhalt_GotFocus()
If Not IsNull(Me!Inhalt) And Me!me!Inhalt = "" Then
intInhalt = Len(Me!Inhalt)
End If
End Sub

Private Sub Inhalt_KeyPress(KeyAscii As Integer)
'Zeichen hochzählen, solange es nicht Löschen ist
If KeyAscii = 8 Then
intInhalt = intInhalt - 1
If intInhalt < 0 Then intInhalt = 0
Else
intInhalt = intInhalt + 1
End If

If intInhalt > 250 Then
Beep
MsgBox "Die Anzahl der Zeichen im Feld Inhalt ist zu groß."
intInhalt = 250
KeyAscii = 0
End If
End Sub

Das funzt aber nur solange, bis niemand selektierten Text mit DEL löscht oder noch schlimmer, die Entf-Taste benutzt. Da greift die KeyPress-Funktion überhaupt nicht.
Habt Ihr noch eine Idee?
Sylvio

Paul.Ostermeier
26.09.2003, 17:47
wie wär's , wenn Du Dein TabellenFeld auf 250 Zeichen einstellst,
und einen etwaigen Fehler mit ON Error abfängst ?

melodoi@t-online.de
26.09.2003, 18:04
Hi Paul,
das Ereignis greift erst, wenn es schon zu spät ist, also schon mehr wie 250 Zeichen eingegeben wurden. Es soll aber beim Tippen des 251'ten Zeichen eine Warnung kommen.
Sylvio

ThomasLG
26.09.2003, 20:25
Hallo,

ich komme erst jetzt zum antworten, hatte zu viel zu tun...

Nutze das Ereignis "Bei Taste" und den Code:


Private Sub Text0_KeyPress(KeyAscii As Integer)
Dim max As String

max = 250 'nach 250 Zeichen ist Ende

If ((Len(Text0.Text) > (max - 1)) And KeyAscii <> 8) Then
MsgBox "Textende!"
KeyAscii = 0
End If


Wenn Du die maximale Anzahl eingegeben hast, wird fast jede Eingabe ignoriert, und bei der nächsten Taste kommt eine Meldung. Nur die "Back Space"- und Del-Taste funktioniert.

Ist das, was Du suchst?

melodoi@t-online.de
27.09.2003, 09:13
Hallo an alle,
Die Lösung war schon lange da. Ich hatte euer .Text übersehen.
Also alles OK. Vielen Dank an alle Beteiligten!
Sylvio