在简体中文系统中 Text 控件的 Keypress 里。如果用 Text1.Text = Chr(Keyascii) 
Keyascii = 0 在输入中文时,可以正常的得到相应的中文。 但在英文系统中却会报错。用 ChrW 虽然不报错,但得到的字符却不是我所输入的中文。请问在英文系统中要如何修改才能用类似上面的方法来达到手工把输入的中文字加上去的目的。我要求是中英文字符都能正常处理。网上找了很多资料了,但在英文系统里总是不行。问题的答案应该很简单,就是几行代码,但我试了好多方法都不行,所以才来问一下。而且网上容易找到的很多版本的文章我都看过了,还是没搞定,所以只好麻烦这里懂得的大哥说两句了。谢谢。.

解决方案 »

  1.   

    能不能说明下 输入中文的时候报什么错误么?
    给你参考
    Private Sub Text1_KeyPress(KeyAscii As Integer)
      If KeyAscii < 0 Then
        Text1 = Chr(KeyAscii + 65536)
      Else
        Text1 = Chr(KeyAscii)
      End If
      KeyAscii = 0
    End Sub
      

  2.   

    首先谢谢楼上两位,错误提示信息如下:
    Run-time error '5':
    Invalid procedure call or argument错误信息没什么作用的,因为英文系统下不能直接用 Chr 函数处理双字节字符的 Ascii 码。但是 Chrw 函数又是处理 Unicode 用的,而 Keypress 事件里的却是 Ascii 码,所以又无法直接用 Chrw 函数。我也试过用 StrConv 函数转换,但 StrConv 是对字符做转换,而此时的却是 Ascii 码,所以无法直接转换。如果有英文环境的朋友就可以自己试一下看看了。或者,有没有一个函数或简单的算法可以把中英文字符的 Ascii 码转换成 Unicode 码的编码来让 Chrw 能正常识别?谢谢各位了。
      

  3.   

    你系统中本身没有中文的Code Page因而无法使用中文,给你的英文系统安装中文语言包看看吧
      

  4.   

    楼上的同志,我上面已经说过了,窗体其它地方显示中文没问题,不手工搞它,Keypress 事件过后中文字也能正常地上去。就是我现在需要手工去搞它就上不去了,而这在中文系统中是正常的,只在英文系统下搞不到
      

  5.   

    测试下 chr(x)中x的适用范围 在press事件 第一句加个 debug.print keyascii 看看和中文系统有什么不同
      

  6.   

    hoho,不好意思木有看清楚那你换个控件吧,引用Windows Forms Object 2.0,用那里面的Textbox看看
      

  7.   

    中英文系统下的 keyascii 是一样的。我上面都说了,如果不干扰它的话,中文是能出来的,但假如我想用 CHR 来“手工”把字符提前加上去的话,那就不行。因为默认情况下字符是在 KEYPRESS 事件后才正式加上去的,但我必须要在KEYPRESS 事件里就要用CHR手工加上去,然后再进行一些其它操作。但就是手工加上去这一步无法搞定。
      

  8.   

    另外,Windows Forms Object 2.0 怎么我找不到期TEXTBOX?其它LABEL等等的控件有,就是没TEXTBOX。
      

  9.   

    哦不好意思,没一个个看清楚,TEXTBOX的样子跟LABEL一样,所以一下子没发现我先试一下先。