在WINFORM中我们经常遇到文本输入框中输入法被禁用或老是变全角输入法等问题,经查阅相关资料,现小结如下:

(一)Control.ImeMode 属性:获取或设置控件的输入法编辑器 (IME) 模式。 
(1)由于窗体属性继承关系,如果你的WINFORM窗体中大部分需要设置为输入法有效状态,可以设置为FORM的ImeMode属性为On.
(2)如果需要某些TextBox为输入法有效,则使用ImeMode.On
(3)如果需要设置整个窗体的输入法全部为半角,可以使用以下代码:
 #region 修正输入法全角/半角的问题
        //声明一些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;
        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);       
                }

}
        }
        #endregion 修正输入法全角/半角的问题
注意:需要引用以下命名空间:using System.Runtime.InteropServices;

(4)对于仅用于输入数值的 TextBox 控件,ImeMode 属性通常设置为 ImeMode.Off。对于 Form 类,ImeMode 属性值设置为 ImeMode.NoControl。
(5)不直接支持输入方法编辑器或允许从 IME 直接输入的大多数类将此属性的值设置为 NoControl。

重要事项:
除非 ImeMode 已经以编程方式设置为 ImeMode.Disable,否则用户能够以交互方式更改它。在前一种情况下,用户将无法使用 IME。

(二)ImeMode各属性的含义:
ImeMode 枚举:指定一个值,该值是用来确定在选定了对象时该对象的输入法编辑器 (IME) 的状态。
以下是微软的解释:

  成员名称 说明
Alpha 字母数字单字节字符 (SBC)。此设置仅对朝鲜语和日语 IME 有效。 
AlphaFull 字母数字双字节字符。此设置仅对朝鲜语和日语 IME 有效。 
Close  
Disable IME 被禁用。如果使用此设置,则用户无法从键盘打开 IME,而且 IME 浮动窗口处于隐藏状态。 
Hangul 朝鲜文 SBC。此设置仅对朝鲜语 IME 有效。 
HangulFull 朝鲜文 DBC。此设置仅对朝鲜语 IME 有效。 
Hiragana 平假名 DBC。此设置仅对日语 IME 有效。 
Inherit 继承父控件的 IME 模式。 
Katakana 片假名 DBC。此设置仅对日语 IME 有效。 
KatakanaHalf 片假名 SBC。此设置仅对日语 IME 有效。 
NoControl 无(默认)。 
Off IME 已关闭。此模式指示 IME 已关闭,这意味着该对象的行为方式与英语输入模式相同。此设置仅对日语、简体中文和繁体中文 IME 有效。 
On IME 已打开。此值指示 IME 已打开,可以输入中文或日语特定的字符。此设置仅对日语、简体中文和繁体中文 IME 有效。 

备注:

输入法编辑器 (IME) 允许用户输入和编辑中文、日语和朝鲜语字符。IME 是用于编写中文、日语和朝鲜语脚本的基本组件。这些书写体系具有的字符比可为常规键盘编码的字符要多。这些语言的 IME 使用描述单个字符或成组字符的基字符序列,以便允许您输入范围较广的一组字符。基字符可以是来自朝鲜文音节的成分字母、日语汉字字符的拼音成分,或者中文字符的各种组合。

(三)如果设置为合适的输入法?
这里仅给一个例子,你可以举一返三:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

public class Form1 : System.Windows.Forms.Form
{
    RichTextBox rtb = new RichTextBox();
    public Form1()
    {
        this.Controls.Add(rtb);
        rtb.Dock = DockStyle.Fill;
        this.InputLanguageChanged += new InputLanguageChangedEventHandler(languageChange);
    }
    private void languageChange(Object sender, InputLanguageChangedEventArgs e)
    {
        // If the input language is Japanese, set the initial IMEMode to Katakana.
        if (e.InputLanguage.Culture.TwoLetterISOLanguageName.Equals("ja"))
        {
            rtb.ImeMode = System.Windows.Forms.ImeMode.Katakana;
        }
    }
    public static void Main(string[] args)
    {
        Application.Run(new Form1());
    }
}

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1665418

转载于:https://www.cnblogs.com/lxinxuan/archive/2007/07/02/803583.html

关于WINFORM中输入法的设置 [转]相关推荐

  1. 关于WINFORM中输入法的设置

    在WINFORM中我们经常遇到文本输入框中输入法被禁用或老是变全角输入法等问题,经查阅相关资料,现小结如下: (一)Control.ImeMode 属性:获取或设置控件的输入法编辑器 (IME) 模式 ...

  2. C# Winform中RichTextBox如何设置文本某段字体的颜色

    C# Winform 中 RichTextBox如何设置文本某段字体颜色 一.在使用处新增代码 想要更改Text文本中某段需要特殊标注字体的颜色,使用TextBox是很难做到的,因为TextBox支持 ...

  3. Winform中通过代码设置DevExpress的TextEdit的类型为Numbernic

    场景 使用DevExpress的EditText控件时,需要限制其输入类型为数字. 正常来说是窗体上拖拽一个TextEdit,然后在设计窗口点击小三角,选择Change Mask 但是如果说TextE ...

  4. C# Winform 中如何获取本机安装输入法,并设置为默认输出语言,如何打开搜狗输入法和手写板...

    C# Winform 中如何获取本机安装输入法,并设置为默认输出语言,如何打开搜狗输入法和手写板 原文:C# Winform 中如何获取本机安装输入法,并设置为默认输出语言,如何打开搜狗输入法和手写板 ...

  5. 在WinForm中屏蔽中文输入法

    在WinForm的开发中,有时有些特殊的要求.例如:在某个Form上彻底屏蔽中文输入法,使之不能切换到中文输入,不能进行中文输入. 这个问题看上去简单,实现起来并没有想象中的简单.下面,把我做的几个实 ...

  6. C#中Winfrom默认输入法的设置方法

    本文实例讲述了C#中Winfrom默认输入法的设置方法.分享给大家供大家参考.具体分析如下: 在WINFORM中我们经常遇到文本输入框中输入法被禁用或老是变全角输入法等问题,经查阅相关资料,现小结如下 ...

  7. Winform中设置ZedGraph的多条Y轴的标题和刻度不显示十次幂

    场景 Winform中设置ZedGraph的坐标轴的标题和刻度不显示十次幂: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106 ...

  8. Winform中设置ZedGraph鼠标悬浮显示线上的点的坐标并自定义显示的内容

    场景 Winform中设置ZedGraph鼠标悬浮显示距离最近曲线上的点的坐标值和X轴与Y轴的标题: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  9. Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环

    场景 Winform中设置BackgroundWorker在取消时关闭后台进程: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

最新文章

  1. python基础教程第四版-python基础教程第4版pdf
  2. easyUI的引用方式
  3. 国学早教视频 16G
  4. 2019年 ICPC亚洲区预赛(上海赛区)总结
  5. Postgre SQL学习
  6. 练习Go语言-HTTP压力测试.md
  7. iTunes出现提示“iTunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后点击“恢复”以将此iPhone恢复为出厂设置。”
  8. LM4766T/NOPB小秘密
  9. java-assured_java - rest-assured 接口测试
  10. Copy Elision
  11. zabbix离线驱动盘安装
  12. 机器学习(四)——逻辑斯蒂回归(Logistic Regression)
  13. 支持自动打怪(内挂)的网游,更新日期15.3.2
  14. 频率与时间换算方法-stm精确延时
  15. skinme找不到java_我的世界skinme皮肤下载|我的世界skinme模组安装器v1.2.1 官方版 - 极光下载站...
  16. php抢票插件下载,实测两款 GitHub 开源抢票插件,所有坑我们都帮你踩过了
  17. 每日一课 | Python基础
  18. 高云FPGA初体验-LED流水灯实验
  19. 【Web前端第二阶段--Bootstrap】Day05
  20. 大家谈中国:面对“双11网购第一脚”,阿里们不必窃喜

热门文章

  1. 2022 微软暑期实习研发提前批面经(全)
  2. connetos 装php,RouterOS 5.16软路由安装图解教程 | 系统运维
  3. BP神经网络-(参考游戏编程中的人工智能技术)
  4. 编程题A-实部与虚部的和
  5. linux服务器垃圾清理,Linux下垃圾清理方法总结[转发]
  6. 如何利用长尾词引爆淘宝免费流量
  7. CRC校验原理和推导过程及Verilog实现(一文讲透)
  8. Windows 10 安装 CUDA 失败之屡败屡战
  9. 用三种方式实现轮播图
  10. 华为服务器驱动下载及安装