在KeyPress中处理,不过不知道怎么判断中文

解决方案 »

  1.   

    只认小写字母和大写字母就是了,ASCII码65-90AND97-122
      

  2.   

    对啊,你可以检测ASCII
    另外你可以将textbox的IMEmode设成Disable,就不能打中文了
      

  3.   

    在KeyPress中判断ascii是否小于零。汉字的ascii编码是小于零的。
      

  4.   

    我用textbox1来存放姓名textbox2存放公司名称 检测有效时是发生在lostfocus事件这样对
    它进行判断就得对整个text1.text按位判断 假如判断无效字符也有一大堆"=","-","!","?"
    数字("0"-"9")等 谁有更好的办法请指点我一下!谢谢!!
      

  5.   

    你肯定要按位判断。你可以用字符串函数MID循环取得每一位字符(ascii和汉字)。
    不要用lostFocus事件,要用Validate事件。否则,用户会很不舒服。
    你想,你用lostFocus,如果用户输入了无效字符,但用户想退出,因为一旦lostFocus你就要判断是否有效,然后报错,是不是很烦?
      

  6.   

    不过,要使用Validate事件,还需要属性设置的配合。在获得焦点的控件中,要设置causeValidate=true。比如,你想让按“确定”按钮时引发某个TextBox的Validate事件,就要设置这个按钮的causeValidate属性
      

  7.   

    实际上,因为你只需要汉字和英文字母,你的判断很简化。比如:
    For i = 0 to Len(Text1.Text)
      intVar = Asc(UCase(Mid(Text1.Text,i,1)))
      If (intVar >= 65 and intVar <=90) or intVar <0 Then
          'ok!
      else
        msgbox "无效字符"
      End If
    Next
      

  8.   

    谢谢huanggx(大侠) 还要请问一下 Validate 和 Change 事件的具体区别在哪里
    我曾经在combo中分时试用这两个事件调用同一个程序  感觉功能一样
      

  9.   

    我这里有正确答案,在次文本框可输入+ - 0-9 a-z A-Z 汉字,具体需求可自行设定
    Private Sub Text3_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
      Case 8
      Case 43
      Case 45
      Case 48 To 57
      Case 65 To 90
      Case 97 To 122
      Case 13
           Text4.SetFocus
      Case Else
           If (KeyAscii And &HFF00) <> 0 Then
              Text3.Text = Text3.Text
           Else
              KeyAscii = 0
              msgbox "无效字符!",,"提示信息"
           End If
      End Select
    End Sub
      

  10.   

    判断是否是中文字符的函数如下
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Byte, ByVal Source As String, ByVal Length As Long)
    '该函数判断传入字符是否是GBK汉字库中的字符
    '如果是则返回True,否则返回False
    Private Function IS_GBK_HZ(ByVal sHZ As String) As Boolean
        Dim aHZ(1) As Byte
        sHZ = Left(sHZ, 1)
        If Len(sHZ) > 0 Then
            CopyMemory aHZ(0), sHZ, 2
            IS_GBK_HZ = (aHZ(0) >= &H81) And (aHZ(0) < &HFE) And (aHZ(1) >= &H40) And (aHZ(1) < &HFF)
        End If
    End Function