本人给某公司开发了一个小管理系统(C/s)版用VS2005开发 MDI窗体昨天给客户装上测试,晕了,他们只要向TextBox中输入字符,输入法就变成全角的了,我在开发的时候没有碰到这个问题....全角输入:123456789
半角输入:123456789虽然可以Shift+(空格)可以切换,但是客户体验度很差,这样用很烦人以前从来没有碰到过全角,半角的问题,所以开发的时候没考虑到这一点,本人暂时还是菜鸟一只,希望有高手帮我解决下.......到网上搜索了半天....有解决方法,但是他们好象说对MDI开发的有问题,不幸的是我正是用MDI模式开发的...我的机器上没有出现自动切换成全角的问题(开发和安装以后都没问题,到客户那里就出鬼了),也不知道怎么去测试,修改

解决方案 »

  1.   

    winform的一个bug,传说打一个补丁可以解决可我打了没有用~~
      

  2.   

    http://support.microsoft.com/?scid=kb%3Ben-us%3B925488&x=8&y=2
      

  3.   

    试试这个补丁:http://download.csdn.net/source/320345
      

  4.   

    http://files.cnblogs.com/zyh-nhy/vs2005输入法补丁.rar貌似就是这个补丁~
      

  5.   

    可能你的开发的机器不是 Win XP 的,但客户我机子是 Win XP 的,才会出现这个问题。
      

  6.   

    如果不装补丁 你的窗体 加入        //声明一些API函数
            [DllImport("imm32.dll")]
            public static extern IntPtr ImmGetContext(IntPtr hwnd);
            [DllImport("imm32.dll")]
            public static extern bool ImmGetOpenStatus(IntPtr himc);
            [DllImport("imm32.dll")]
            public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);
            [DllImport("imm32.dll")]
            public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2);
            [DllImport("imm32.dll")]
            public static extern int ImmSimulateHotKey(IntPtr hwnd, int lngHotkey);
            private const int IME_CMODE_FULLSHAPE = 0x8;
            private const int IME_CHOTKEY_SHAPE_TOGGLE = 0x11;
            //重载Form的OnActivated
            protected override void OnActivated(EventArgs e)
            {
                base.OnActivated(e);
                IntPtr HIme = ImmGetContext(this.Handle);
                if (ImmGetOpenStatus(HIme))  //如果输入法处于打开状态
                {
                    int iMode = 0;
                    int iSentence = 0;
                    bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);  //检索输入法信息
                    if (bSuccess)
                    {
                        if ((iMode & IME_CMODE_FULLSHAPE) > 0)   //如果是全角
                            ImmSimulateHotKey(this.Handle, IME_CHOTKEY_SHAPE_TOGGLE);  //转换成半角
                    }
                }
            }      
      

  7.   

    我的项目在win2003 和 xp 都呆过 呵呵  公司用的是2003 家里是xp
      

  8.   

    TextBox.ImeMode属性
    就可以解决这个问题
      

  9.   

    传说中VS05的BUG,不过好像打了补丁有时也没有用
      

  10.   

    我也碰到过,还有比你更麻烦的,我在 Enter 中加入
                This.ImeMode = ImeMode.Hangul;
    还有点效果,智能ABC问题比较严重,我还发现会自动录入字符,新出的输入法基本没事.
      

  11.   

    this.textbox.ImeMode = ImeMode.Off;
      

  12.   

                    System.Windows.Forms.Application.CurrentInputLanguage = InputLanguage.FromCulture(System.Globalization.CultureInfo.CurrentCulture);
    this.textbox.ImeMode = ImeMode.Off;
      

  13.   

    支持使用imm32,自己控制输入框的全半角转换,当输入框获得焦点的时候,切换成半角就可以了
      

  14.   

    傳說中下載個補丁就行了NDP20-KB925488-X86.msp
      

  15.   

    你也可以重新封装一下TextBox。我的博客里有封装Textbox的一篇文章,还有一篇全角半角转换函数。如果需要可以到我的博客里搜索一下。
      

  16.   

    IMEMODE 可以设置全角半角?? 学习...
      

  17.   

    VS2005中文输入法问题的总结
    http://blog.csdn.net/netcoder/archive/2009/02/18/3907472.aspx
      

  18.   

    明明是.NET Framework 2.0的BUG...
    打个补丁就行了
      

  19.   

    我和楼主一样的问题 说说我做的尝试吧
    1.打微软补丁 无效 基本上这个补丁打了和没打一样
    2.设置ImeMode 部分情况下有用 但不能保证全部游泳 而且每个控件都要设置 太麻烦
      

  20.   


    大哥,我安装你给的补丁,咋安装不了呢,提示Windows Installer 服务不能安装此升级修补程序,因为找不到升级的程序或.......
      

  21.   


    你download window installer 3.0
      

  22.   

    TextBox.ImeMode属性 
    就可以解决这个问题
      

  23.   

    用VFP设计C/S结构的管理软件
    IMEMode属性;
    IMESTATUS函数;
    就搞定这个在VFP里不是问题的问题;
    VFP8对winxp百分百的支持;在win200、winxp里都没有;
      

  24.   

    现在好好办法了,你用Framework3.5试试还出不出全角了
      

  25.   

    补丁没用,本人亲测n次!要自己写很多代码,而且会影响用户习惯,
    最好的办法是直接升级VS 2008!
    不过VC++ 2005的MFC部分,没这个bug。