如何检查是否超出了文本框的最大长度?

时间:2014-10-23 17:55:36

标签: vb.net winforms visual-studio substring maxlength

我的问题:

我将文本框限制为8个字符,并在超出(> 8)而不是达到(= 8)时显示工具提示。使用.Maxlength功能可以防止用户超过8个字符,因此我的> 8函数永远不会被执行。

如果我放弃.Maxlength功能,而是使用.Substring来限制输入,我的> 8功能已完成,但行为与.Substring不同(最后一个而不是前一个8)输入被保留,我失去警报声。)

在不影响前8个输入的情况下,能够在超过.Maxlength时检查是否更加清晰。

重现:

  1. 在Visual Studio中,在设计模式下,将文本框和工具提示拖到新表单上。
  2. 按原样使用以下内容:
  3. 代码:

    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
    

3 个答案:

答案 0 :(得分:1)

当您替换文本时,它会重置插入符号,因此最后将其移回原位:

TextBox1.Text = TextBox1.Text.Substring(0, 8)
TextBox1.Select(TextBox1.TextLength, 0)

答案 1 :(得分:1)

如果无效,最好按下

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 If

End Sub

Private Sub HideToolTip()
    If ToolTip1.GetToolTip(TextBox1) <> "" Then
        ToolTip1.Active = False
        ToolTip1.Hide(TextBox1)
    End If
End Sub

Private 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

修改

有一个未成年人的错误&#34;在IsNumeric()函数中,因为它允许带空格的数字和多个&#34;。&#34;

8..888 'is numeric
.9999  'is numeric

解决所有问题:

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 If

End Sub

答案 2 :(得分:0)

在子串调用

之后添加
TextBox1.SelectionStart = 8