Jak mogę sprawdzić, czy została przekroczona maksymalna długość pola tekstowego?



Mój problem:
>
Ograniczam pole tekstowe do 8 znaków i wyświetlam podpowiedź, gdy zostanie przekroczona (> 8) i nieosiągnięta (= 8). Użycie funkcji
.Maxlength
nie pozwala użytkownikowi na przekroczenie 8 znaków, więc moja funkcja & > 8 nigdy nie zostanie wykonana.
Jeśli zrezygnuję z funkcji
.Maxlength
i zamiast tego użyję
.Substring
do ograniczenia danych wejściowych, wykonywana jest moja funkcja & > 8, jednak zachowanie jest inne niż
.Substring
(zapisywane jest ostatnie 8 wejść, a nie pierwsze, i gubię dźwięk alertu).
Byłoby dużo czystsze, gdybyśmy mogli sprawdzić, kiedy zostanie przekroczona
.Maxlength
bez wpływu na pierwsze 8 wejść.

Powielać:
>
  • W programie Visual Studio w trybie projektowania przeciągnij pole tekstowe i etykietkę narzędzia do nowego formularza.
  • Użyj następujących, jak jest:


Kod

:
Public Class Form1
Private Sub Textbox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
TextBox1.MaxLength = 8
If (Not IsNumeric(TextBox1.Text) And TextBox1.Text.Length > 0) Then
If ToolTip1.GetToolTip(TextBox1) = "" Then
ToolTip1.ToolTipTitle = "Input must be numeric!"
ToolTip1.Active = True
ToolTip1.IsBalloon = True
ToolTip1.ToolTipIcon = ToolTipIcon.Warning
ToolTip1.Show(vbNewLine, TextBox1, 45, -40)
End If
ElseIf TextBox1.Text.Length > 8 Then
'TextBox1.Text = TextBox1.Text.Substring(0, 8)
ToolTip1.IsBalloon = True
ToolTip1.ToolTipTitle = "8 character maximum!"
ToolTip1.Active = True
ToolTip1.ToolTipIcon = ToolTipIcon.Warning
ToolTip1.Show(vbNewLine, TextBox1, 45, -40)
Else
ToolTip1.Active = False
ToolTip1.Hide(TextBox1)
End If
End Sub
End Class

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Lepiej stłum

klucz

jeśli jest nieprawidłowy:
Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim str As String str = TextBox1.Text
str = str.Insert(TextBox1.SelectionStart, CStr(e.KeyChar)) If e.KeyChar = ChrW(Keys.Back) Then
HideToolTip()
ElseIf str.Length > 8 Then
ShowToolTip("8 character maximum!") e.Handled = True
ElseIf Not IsNumeric(str) Then
ShowToolTip("Input must be numeric!") e.Handled = True
Else
HideToolTip()
End IfEnd SubPrivate Sub HideToolTip()
If ToolTip1.GetToolTip(TextBox1) <> "" Then
ToolTip1.Active = False
ToolTip1.Hide(TextBox1)
End If
End SubPrivate Sub ShowToolTip(ByVal str As String)
'always check if tooltip is visible, to avoid inversion
If ToolTip1.GetToolTip(TextBox1) = "" Then
ToolTip1.ToolTipTitle = str
ToolTip1.Active = True
ToolTip1.IsBalloon = True
ToolTip1.ToolTipIcon = ToolTipIcon.Warning
ToolTip1.Show(vbNewLine, TextBox1, 45, -40, 1000)
End If
End Sub


EDIT

W
IsNumeric ()
występuje niewielka funkcja "błędu", ponieważ akceptuje ona liczby numeryczne ze spacjami i wielokrotnościami "."
8..888 'is numeric.9999 'is numeric

Aby rozwiązać wszystko:
Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim str As String = "0123456789." If e.KeyChar = ChrW(Keys.Back) Then
HideToolTip()
ElseIf TextBox1.Text.Length = 8 Then
ShowToolTip("8 character maximum!") e.Handled = True
ElseIf e.KeyChar = "." And (TextBox1.Text.Contains(".") Or TextBox1.SelectionStart = 0) Then 'supress a second "." or a first one
ShowToolTip("Input must be numeric!") e.Handled = True
ElseIf Not str.Contains(CStr(e.KeyChar)) Then
ShowToolTip("Input must be numeric!") e.Handled = True
Else
HideToolTip()
End IfEnd Sub
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Kiedy zastępujesz tekst, resetuje karetkę, więc umieść go z powrotem na miejscu na końcu:
TextBox1.Text = TextBox1.Text.Substring(0, 8)
TextBox1.Select(TextBox1.TextLength, 0)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dodaj to po wywołaniu podłańcucha
TextBox1.SelectionStart = 8

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się