如题,先谢!

解决方案 »

  1.   

    Private Sub Command1_Click()
    MsgBox Len(Text1.Text)
    End Sub
      

  2.   

    将每个字符都判断一次是否ASCII码表里面有的!没有就是汉字
      

  3.   

    Private Sub Command4_Click()
    MsgBox LenB(StrConv(Text1.Text, vbFromUnicode)) - Len(Text1.Text)
    End Sub
      

  4.   

    Private Sub Text1_Keypress()
    MsgBox LenB(StrConv(Text1.Text, vbFromUnicode)) - Len(Text1.Text)
    End Sub
      

  5.   

    试试下面这个APIPublic Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
      

  6.   

    LenB(StrConv(Text1.Text, vbFromUnicode)) 可以检测字节数。因为汉字(还有韩文、日文等其他远东文字)字符占 2 个字节,所以用它减去 Len(Text1.Text)(字符数)就可以得到汉字字符(包括标点和符号)数了。
      

  7.   

    就这里说两句,前几天碰到的一个问题:如何判断文本框中光标的位置?注意,我希望知道的是光标前面的字符数,而不是字节数!一个汉字占两个字节,而字母只占一个字节。我可以用SendMessage查到光标前面有多少字节,但是如果文本框中是汉字和字母数字组合,我就判断不出前面几个字符了。各位有什么解决的办法没有?
      

  8.   

    将窗体Form的字体设置与文体框Text的一样
    用Form的TextWith属性可以返回一个字符的长度,一个汉字的长度是一个字母长度的一倍。
    示例:count返回汉字的个数
    private sub Command1_click()
    dim i as integer
    dim length as integer
    dim count as integer
    length=me.textwidth("汉")
    for i=1 to len(text1)
        if me.textwidth(mid(text1,i,1)) = length then count=count+1
    next
    msgbox "汉字个数:" & count
    end sub
      

  9.   

    Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long  以上是lstrlen的声明。lstrlen的作用只有一个:
      得到字符串的字节数。所以执行 lstrlen("字符abc") 将返回7。我们不需要知道它内部是如何工作的,但它总是返回该字符串是ANSI时的长度,并且速度很快。
     
     
     
     
      

  10.   

    字符串  上一期我们已经对API有了大概了解,并学习了第一个API。为了方便以后的学习,我就先讲一点字符串知识和一个相关的API。  用过VB5.0或者更早版本的读者应该知道VB有一个测试字符串长度的函数: Len。但当你升级到VB6时,会发现这里的Len并没有以前那么好用了——它变成了测试字符个数而不是字符串长度。就是说,当你用以前版本的VB执行Len("字符abc")时,返回值是7,因为中文字符每个有2个字节,所以总共有7个字节;而在VB6中执行,返回值是5。
      VB6不再有一个直接计算出字符串总字节数的函数了,因为VB6内部已经把字符串转换成了Unicode——一种比ANSI更新的字符编码方式。  Unicode把每一个字,无论是中文还是其他文字都当成两个字节,如果是英文,则这两个字节中第二个字节保留着不使用,如果是双字节字符(如中文,双字节日文以及韩文),而由这两个字节的组合表示一个字符。所以Len可以方便地知道一共有多少个双字节字符,多少个单字节字符,也就出现了上面所说的情况。
      不过既然VB内部把ANSI字符转换成Unicode,那么它一定有对应方法转换回来。所以这里提供一个比较方便的方法来得到总字节数: LenB(StrConv("字符abc", vbFromUnicode))。
      这里用到了一个LenB() 函数,你可以自己试试它,比如 LenB("字符")、LenB("abc")、LenB("字符abc"),会发现返回值分别是4、6和10。
      为什么是4、6和10呢?
      我说过VB内部把ANSI字符转换为Unicode,每个Unicode字符用2个字节来表示,所以,LenB() 的作用是返回字符串的实际字节数。但是,这个实际字节数已经不是我所输入的字符串的,而是被VB转换过的(我们无法让VB函数在转换之前先算好长度),所以我们需要先把字符串转换回来,使用的是 StrConv() 函数。
      对于这个函数我不想太过详细解释它(一般应用中比较少用),你可以参考MSDN,我只提一提它的第二个参数:vbFromUnicode。  StrConv()函数的第二个函数指定转换的类型,vbFromUnicode 指定把字符串从Unicode转换回来,如果是vbUnicode,则把字符串转换为Unicode。注意,虽然你的程序中写的是ANSI的字符而不是Unicode字符,但当这个函数执行时,它得到的却是已经被转换成为Unicode的字符串了。
      现在问题可以算解决了,但我们还需要另一个解决方法,因为这种方法太费时。想想看,每一次算长度都要进行 Unicode->ANSI 的转换,这将会花费太多时间。对少量字符还可以,对长字符串,时间就变得更长了。
      所以我们再讲一个API:lstrlen。
    Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long  以上是lstrlen的声明。lstrlen的作用只有一个:
      得到字符串的字节数。所以执行 lstrlen("字符abc") 将返回7。我们不需要知道它内部是如何工作的,但它总是返回该字符串是ANSI时的长度,并且速度很快。