【问题标题】:only allow numbers and fullstop (period) in textbox仅允许文本框中的数字和句号(句点)
【发布时间】:2011-02-17 15:14:38
【问题描述】:

我知道以下代码阻止用户使用文本框中的空格但是我如何允许用户只使用数字和句号(所以我可以添加像 1.5 这样的值)

    Private Sub Textbox4_keyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox4.KeyDown

    If e.KeyCode = Keys.Space Then
        TextBox4.Clear()
        MsgBox("Invalid character. No spaces Permited...")

    End If

【问题讨论】:

    标签: vb.net textbox keycode


    【解决方案1】:

    从可用性的角度来看,在 KeyDown 事件中测试有效输入并不好。例如,当用户想要将文本粘贴到您的文本框中时会发生什么?

    此外,用户仍然可以使用 TextBox 的上下文菜单粘贴无效输入,您的代码不会注意到这一点。

    您应该允许所有输入,然后在用户离开文本框时测试其有效性。 VB 有一个额外的事件,当文本框失去焦点时触发:Validating。使用此事件(并且此事件)来测试有效输入。

    【讨论】:

      【解决方案2】:

      一个简单的方法可能是寻找“允许的”字符,如果没有,显示错误消息。

      【讨论】:

      • 我只是在允许的字符上找不到任何东西,你能指出我正确的方式吗?
      【解决方案3】:

      在过去 20 年的代码编写中,我总是使用以下基本原理来检查 TextBoxes 检查字符。
      首先,您必须创建一个单独的类,您可以将其称为(为方便起见)Char_Validation。
      在这个类中,您将放置一个返回布尔值的函数,如下所示。

      Public Class Char_Validation
          Public Const Gr As String = "Greek"
          Public Const En As String = "English"
          Public Const Num As String = "Numbers"
          Public Const FullGr As String = "Full Greek"
          Public Const FullEn As String = "Full English"
          Public Const EnN As String = "English with Numbers"
          Public Const GrN As String = "Greek with Numbers"
      
          Public Shared Function ValidateChar(ByVal AsciiChar As String, ByVal CharTable As String, ByVal sender As Object, ByVal e As System.EventArgs) As Boolean
              Dim ConvChar As Integer = CUInt(Microsoft.VisualBasic.Asc(AsciiChar))
              Dim ConvCharW As Integer = CUInt(Microsoft.VisualBasic.AscW(AsciiChar))
      
              ValidateChar = False
      
              Select Case CharTable
                  Case En
                      Select Case ConvChar
                          Case 65 To 126, 145 To 150, 8, 32 To 47, 58 To 64, 128, 130
                              ValidateChar = True
                      End Select
                  Case EnN
                      Select Case ConvChar
                          Case 48 To 57, 65 To 126, 8, 32, 45
                              ValidateChar = True
                      End Select
      .
      .
      .
      .
      .
                  Case Num
                      Select Case ConvChar
                          Case 44 To 57, 92, 8
                              ValidateChar = True
                      End Select
              End Select
      
          End Function
      End Class
      

      在 Form 类中,您将使用 TextBox_KeyPress,您将在其上使用以下代码。

      Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
              ErrorProvider1.Clear()
              ErrorLabel.ForeColor = Drawing.Color.Black
          Select Case Char_Validation.ValidateChar(e.KeyChar, Char_Validation.Num, sender, e)
                  Case True
                  Case False
                      ErrorProvider1.SetError(TextBox1, "Wrong Character Only Numbers")
                      Beep()
          e.KeyChar = ""
              End Select
          End Sub
      

      因此,您将禁止用户将字符置于您的决定之外。
      我希望这将从现在开始涵盖您。

      【讨论】:

        【解决方案4】:

        以下代码适用于我:firefox、IE 8、chrome、Safari 和 iphone。

        函数 dotplaced(myfield){ if(myfield.indexOf(".")===-1){ 返回假; } 返回真;
        } 函数 NumbersOnly(myfield, e) { 变量键; var keychar;

        if (window.event) {
            key = window.event.keyCode;
        }
        else if (e) {
            key = e.which;
        }
        else {
            return true;
        }
        
        keychar = String.fromCharCode(key);
        
        // control keys
        if ((key == null) || (key == 0) || (key == 8) ||
        (key == 9) || (key == 13) || (key == 27)) {
            return true;
        }
        // numbers
        else if ((("0123456789").indexOf(keychar) > -1)) {
            return true;
        }
        // decimal point jump
        else if (!dotplaced(myfield.value) && (keychar == ".")) {
            //myfield.form.elements[dec].focus();        
            return true;
        }
        else {
            return false;
        }
        

        }

        【讨论】:

          猜你喜欢
          • 2013-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-24
          • 2012-08-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多