0

如何在输入框中接受连字符和数值?

我有

Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles inputBox_1.KeyDown
        Select Case e.KeyCode
            Case Keys.D0 To Keys.D9, Keys.NumPad0 To Keys.NumPad9, _
                 Keys.Back, Keys.Delete, Keys.Left, Keys.Right
                If e.Shift = True Then
                    e.SuppressKeyPress = True
                    Exit Sub
                End If
                e.SuppressKeyPress = False
            Case Else
                e.SuppressKeyPress = True
        End Select
    End Sub

但是当我在行中输入“-”字符时它失败了

Keys.D0 To Keys.D9, Keys.NumPad0 To Keys.NumPad9, _
                     Keys.Back, Keys.Delete, Keys.Left, Keys.Right

如何让连字符写成?

4

2 回答 2

1

最好创建您的自定义控件并在您想要的任何地方使用它 数字文本框 另外对于位数限制,我认为文本框有一个 maxlength 属性 可以以下链接回答您的问题

关联

于 2013-05-22T02:18:24.627 回答
1

这里有一个解决方案。我希望它更长一点,您可以通过将文本框文本属性拆分为单个字符并全部检查它们来加快它(但是如果您希望您编写代码将字母放入文本框中,那么这样做会正确那)。

无论如何,我对此进行了测试,它运行良好,它在秒表上显示为 0ms,因此它不应该为用户提供任何明显的减速。注意有一个全局布尔变量。

    Dim boo As Boolean = True

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    Dim temp As String
    Dim tempchr As Integer
    If boo = True Then
        boo = False

        temp = Mid(TextBox1.Text, TextBox1.SelectionStart, 1)
        tempchr = Asc(temp)

        If tempchr < 48 Or tempchr > 58 Then
            If tempchr = 45 Then

            Else
                If TextBox1.SelectionStart - 1 > 0 Then
                    If TextBox1.SelectionStart = TextBox1.TextLength Then
                        TextBox1.Text = Mid(TextBox1.Text, 1, TextBox1.SelectionStart - 1)
                    Else
                        TextBox1.Text = Mid(TextBox1.Text, 1, TextBox1.SelectionStart - 1) & Mid(TextBox1.Text, TextBox1.SelectionStart + 1)
                    End If

                Else
                    If TextBox1.SelectionStart = TextBox1.TextLength Then
                        TextBox1.Text = ""
                    Else
                        TextBox1.Text = Mid(TextBox1.Text, TextBox1.SelectionStart + 1)
                    End If

                End If

            End If
        Else
            boo = True
        End If

    Else
        boo = True
    End If
    TextBox1.SelectionStart = TextBox1.TextLength
End Sub
于 2013-05-22T04:52:13.647 回答