关于WINFORM中输入法的设置
来源:互联网 发布:康佳智能电视软件 编辑:程序博客网 时间:2024/04/30 03:40
在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) 的状态。
以下是微软的解释:
备注:
输入法编辑器 (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());
}
}
- 关于WINFORM中输入法的设置
- 关于WINFORM中输入法的设置(补充)
- 关于WINFORM中输入法的设置
- 关于WINFORM中输入法的设置 (转)
- 关于WINFORM中输入法的设置
- 关于WINFORM中输入法的设置
- 关于WINFORM中输入法的设置
- 关于WinForm中设置Appconfig的问题
- 关于在Winform中设置,获取fckeditor 的值
- winform中不能一次性切换到中文输入法的解决方法
- 解决c#中winform的输入法不可用问题
- 关于c# winForm窗体最大化的设置
- 关于c# winForm窗体最大化的设置
- 关于c# winForm窗体最大化的设置
- 关于winForm窗体最大化的设置(转)
- 关于androidManifest.xml中输入法窗口设置说明(windowSoftInputMode)
- .Net WinForm 中关于输入法打开却无法输入中文总结
- winform中datagridview的一些设置
- 超通用存储过程分页(完整)
- ZFS on Linux, It's alive
- 常见设计模式的解析和实现(C++)之一-Factory模式
- 关于linux下软件安装要注意的地方
- VC中DDB与DIB位图编程全攻略
- 关于WINFORM中输入法的设置
- 明确自己的方向
- DIB(Device-indepentent bitmap)
- FUSE - implementing filesystems in user space
- 感叹一下吧
- Ubuntu FAQ
- 利用sender的Parent获取GridView中的当前行(转自Web.网际浪人)
- 2007年通过做调查你一样能获得比较稳定的收入
- WinCE 程序设计 (3rd 版)--2.3 位图