在某TextBox中输入内容的时候,一般情况都是汉字,我将ImeMode属性设置为On,自动打开输入法,但默认状态是全角。
有没有办法实现: 如果是汉字就全角保存,如果是数字就半角保存
或者,使输入法默认半角

解决方案 »

  1.   

    你用的是VS2005把 一打开就是全角  安装个补丁看看..
    如果不是可以使用        [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;        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); 
                    }
                }
            }
    这样看看
      

  2.   

    vs2008 我是这个干的每个窗体的构造方法里写:this.ImeMode = ImeMode.OnHalf;
      

  3.   


    必须是写代码,在属性栏里是改不了的.....只要修改最底层的容器的ImeMode属性就OK
      

  4.   

    写TextBox的KeyPress事件,吧你需要替换的都描述到如下规则中。例如数字的
    private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
    {
        const string from = "0123456789";
        const string to = "0123456789";
        int n = from.IndexOf(e.KeyChar);
        if (n != -1) e.KeyChar = to[n];
    }
      

  5.   

    用了你的方法,然后将需要混合输入的ImeMode全改成NoControl,不需要输入汉字的改成了DisAble,终于有了想要的效果