如何通过子类化,限制文本框的输入长度(中英文混合)
很急,谢谢

解决方案 »

  1.   

    简单的你可以通过设置MaxLength属性来完成,复杂点的你可以在Change事件中完成。
      

  2.   

    Public Const EM_LIMITTEXT = &HC5
    Dim intret As Long
    intret = SendMessage(Text1.hwnd, EM_LIMITTEXT, 10, ByVal 0&)
      

  3.   

    你试试就知道了,考过来的自动截取private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    private Const EM_LIMITTEXT = &HC5Private Sub Command3_Click()
    Dim intret As Long
    intret = SendMessage(Text1.hwnd, EM_LIMITTEXT, 10, ByVal 0&)
    End Sub
      

  4.   

    //你们想过剪贴版本的数据过来的话,怎么办一样处理,设置MaxLength属性或调用发送EM_SETLIMITTEXT消息(该消息取代了EM_LIMITTEXT消息)如果你希望通过子类处理的话,就拦截EN_UPDATE这条通知消息,不过我个人觉得没有这个必要
      

  5.   

    我的问题是在用户输入的时候,就进行检测,进行截取,而不是输入完成(),你说把这个时间加入到哪里.效果同vb的maxlength一样但是要针对字节的判断而不是字
      

  6.   

    change事件完全可以搞定了吧,到了这个长度就不接受输入,通过粘贴超出这个长度就自动砍掉后面的
      

  7.   

    vb的maxlength是针对字的设置,我希望它能检测出字和字节的累积长度
    我输入:人123-->它的混合长度是lenb((strconv("人123"),vbFromUnicode))=5
    你们说我的maxlength设置成多少
    另:发送em_setlimittext消息也有这样的问题,wparm你设置成多少啊
      

  8.   

    //发送em_setlimittext消息也有这样的问题,wparm你设置成多少啊不用担心,em_setlimittext是针对字节的
      

  9.   

    解决方法:
    Private Sub Text1_Change()
    Const DefineLength = 6          '你允许录入的长度。
        If LenB(StrConv(Text1.Text, vbFromUnicode)) > DefineLength Then
            Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
            Text1.SelStart = Len(Text1.Text)
        End If
    End Sub
      

  10.   

    用maxLength挺好的嘛,干吗搞那么多啊,烦死了!
      

  11.   

    em_setlimittext我为什么查不到啊常量多少啊
      

  12.   

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Const EM_LIMITTEXT = &HC5Private Sub Form_Load()
    Const Max_Char = 100
    Call SendMessage(Text1.hWnd, EM_LIMITTEXT, Max_Char, 0&)
    End Sub限制的就是字节数。
      

  13.   

    //em_setlimittext我为什么查不到啊常量多少啊其实就是EM_LIMITTEXT消息,只是微软换了个名字而已