C#中Winfrom默认输入法的设置方法
本文实例讲述了C#中Winfrom默认输入法的设置方法。分享给大家供大家参考。具体分析如下:
在WINFORM中我们经常遇到文本输入框中输入法被禁用或老是变全角输入法等问题,经查阅相关资料,现小结如下:
一、Control.ImeMode属性:获取或设置控件的输入法编辑器(IME)模式。
(1)由于窗体属性继承关系,如果你的WINFORM窗体中大部分需要设置为输入法有效状态,可以设置为FORM的ImeMode属性为On.
(2)如果需要某些TextBox为输入法有效,则使用ImeMode.On
(3)如果需要设置整个窗体的输入法全部为半角,可以使用以下代码:
#region修正输入法全角/半角的问题
//声明一些API函数
[DllImport("imm32.dll")]
publicstaticexternIntPtrImmGetContext(IntPtrhwnd);
[DllImport("imm32.dll")]
publicstaticexternboolImmGetOpenStatus(IntPtrhimc);
[DllImport("imm32.dll")]
publicstaticexternboolImmSetOpenStatus(IntPtrhimc,boolb);
[DllImport("imm32.dll")]
publicstaticexternboolImmGetConversionStatus(IntPtrhimc,refintlpdw,refintlpdw2);
[DllImport("imm32.dll")]
publicstaticexternintImmSimulateHotKey(IntPtrhwnd,intlngHotkey);
privateconstintIME_CMODE_FULLSHAPE=0x8;
privateconstintIME_CHOTKEY_SHAPE_TOGGLE=0x11;
protectedoverridevoidOnActivated(EventArgse)
{
base.OnActivated(e);
IntPtrHIme=ImmGetContext(this.Handle);
//如果输入法处于打开状态
if(ImmGetOpenStatus(HIme))
{
intiMode=0;
intiSentence=0;
//检索输入法信息
boolbSuccess=ImmGetConversionStatus(HIme,refiMode,refiSentence);
if(bSuccess)
{
//如果是全角,转换成半角
if((iMode&IME_CMODE_FULLSHAPE)>0)
ImmSimulateHotKey(this.Handle,IME_CHOTKEY_SHAPE_TOGGLE);
}
}
}
#endregion修正输入法全角/半角的问题
注意:需要引用以下命名空间:usingSystem.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使用描述单个字符或成组字符的基字符序列,以便允许您输入范围较广的一组字符。基字符可以是来自朝鲜文音节的成分字母、日语汉字字符的拼音成分,或者中文字符的各种组合。
三、如果设置为合适的输入法?
这里仅给一个例子,打击可以举一返三:
usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Data;
publicclassForm1:System.Windows.Forms.Form
{
RichTextBoxrtb=newRichTextBox();
publicForm1()
{
this.Controls.Add(rtb);
rtb.Dock=DockStyle.Fill;
this.InputLanguageChanged+=newInputLanguageChangedEventHandler(languageChange);
}
privatevoidlanguageChange(Objectsender,InputLanguageChangedEventArgse)
{
//IftheinputlanguageisJapanese,settheinitialIMEModetoKatakana.
if(e.InputLanguage.Culture.TwoLetterISOLanguageName.Equals("ja"))
{
rtb.ImeMode=System.Windows.Forms.ImeMode.Katakana;
}
}
publicstaticvoidMain(string[]args)
{
Application.Run(newForm1());
}
}
希望本文所述对大家的C#程序设计有所帮助。