关于WINFORM中输入法的设置

摘要:
关于WINFORM(transfer)中输入法的设置,这种问题发生在John Suna专栏的开发中。网络真的很好:)以下是一组文本,感谢作者为我们的方便所做的努力。在WINFORM中,我们经常遇到文本输入框中的输入法被禁用或全角度输入法总是被更改的问题。查阅相关数据后,总结如下:(1)ControlImeMode属性:获取或设置控件的输入方法编辑器模式。此模式表示IME已关闭,这意味着对象的行为方式与英文输入模式相同。此值表示IME已打开,可以输入中文或日语特定字符。
关于WINFORM中输入法的设置 (转)

johnsuna(阿山NET)的专栏

开发中正好遇到这类问题,网络真好啊:)下面是正文收集,感谢作者的辛勤工作给我们带来的便利.

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

(一)Control.ImeMode 属性:获取或设置控件的输入法编辑器 (IME) 模式。
(1)由于窗体属性继承关系,如果你的WINFORM窗体中大部分需要设置为输入法有效状态,可以设置为FORM的ImeMode属性为On.
(2)如果需要某些TextBox为输入法有效,则使用ImeMode.On

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

        //声明一些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);        
                } 
 
            }
        }

重要事项:
除非 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 (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

补充:

输入法——讨厌的全角

免责声明:文章转载自《关于WINFORM中输入法的设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 自定义View修炼-自定义加载进度动画XCLoadingImageViewat_today git--一文弄懂git的工作区、索引区、本地仓库、远程仓库以及add、commit、push三个操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

中文分词系列(一) 双数组Tire树(DART)详解

1 双数组Tire树简介   双数组Tire树是Tire树的升级版,Tire取自英文Retrieval中的一部分,即检索树,又称作字典树或者键树。下面简单介绍一下Tire树。 1.1 Tire树 Trie是一种高效的索引方法,它实际上是一种确定有限自动机(DFA),在树的结构中,每一个结点对应一个DFA状态,每一个从父结点指向子结点(有向)标记的边对应一...

Sed命令

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要...

winform程序登陆后关闭登录窗体

用winform做程序的时候,我们一般都是在Program先启动登录窗体,然后登录成功后才创建主窗体,结果这就导致了登录窗体无法关闭 所以如果我们不在Program的程序入口先创建登录窗体的话就能完美实现登录成功后关闭登录窗体的功能了,直接贴代码 usingSystem; usingSystem.Collections.Generic; usingSyst...

记录一次批量处理文档的过程

要做一项工作,内容是将一个word中的图表复制到多个(接近300个)word文档的末尾,不想一个个CTRL C+CTRL V,就想到了用程序来实现 我第一个想到的使用python来实现,由于技术太渣,尝试了多次,没能写出来,只记得有一个叫做win32com的模块,专门处理文档的。这里先不说了 在查阅资料的过程中,偶然看见在linux中的cat命令似乎能做这...

WinForm实现鼠标悬停显示控件

在某些需频繁操作的环节中,为提高效率、减少劳动,可以在操作细节上下功夫,以带来更好的用户体验。 今天介绍的鼠标悬停显示功能就是一例,看似仅仅节省了一次点击,实则在繁复操作中能够为用户节约很多体力,提高舒适度。 本例中的基本需求是: 鼠标移入设置区域后,直接弹出详尽设置内容,并当进行了设置或鼠标移出弹出的设置区域后,自动关闭弹出的设置区域。 在这里,我设计...

sz/rz实现及cat binary文件时乱码问题

一、嵌入式系统中文件传输这个工具之前还的确是没有使用到过,可能的原因是因为之前一直使用桌面系统fedora core发行版本,开发主要使用busybox文件系统,而这两种版本中都没有自带sz/rz工具。它们的作用是通过串口来发送和接收文件,虽然说是串口,所有的支持串口协议的软件或者链路都可以,例如使用telnet/ssh之类的远程链接工具,主机之间的通讯使...