在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 = ;
int iSentence = ;
//检索输入法信息
bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);
if (bSuccess)
{
//如果是全角,转换成半角
if ((iMode & IME_CMODE_FULLSHAPE) > )
ImmSimulateHotKey(this.Handle, IME_CHOTKEY_SHAPE_TOGGLE);
} }
}
#endregion 修正输入法全角/半角的问题

注意:(1)需要引用以下命名空间:using System.Runtime.InteropServices;

(2)更为简单的解决此问题的方式是下载“全半角补丁”安装程序。

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

重要事项:
除非 ImeMode 已经以编程方式设置为 ImeMode.Disable,否则用户能够以交互方式更改它。

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

以下是微软的解释:

<span style="font-size:13px;">成员名称 说明
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 有效。 </span>

备注:

输入法编辑器 (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());
}
}

本文部分内容来自CSDN博客,转载请标明出处:http://blog.csdn.net/johnsuna/archive/2007/06/25/1665418.aspx

Control.ImeMode属性简释的更多相关文章

  1. Asp.net web Control Enable 属性设置

    最近手上有一个很简单的一个小项目,需要查看编辑的历史记录,先前设计的时候把数据都save 到DB了,现在时间紧迫 就不在画新的UI,而是采用以前的edit页面 来显示数据,这里就需要把页面上所有的co ...

  2. DuiLib笔记之Control常用属性

    name 指定控件名称,同一窗口内必须唯一,类型:STRING float 用于指定控件是否使用绝对定位,或设置FloatPercent,类型:BOOL,默认值为false,格式:float=&quo ...

  3. System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....

    #region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ...

  4. C# 切换中英文输入法

    在界面输入时,有时需要限定输入法. 在不自定义正则表达式或者其它输入处理的情况下,切换中英文时与当前语言栏匹配,有以下的几种系统方案: InputLanguage方案 使用System.Windows ...

  5. Form 详细属性--2016年12月4日

    属性       名称 说明   AcceptButton 获取或设置当用户按 Enter 键时所单击的窗体上的按钮.   AccessibilityObject 获取分配给该控件的 Accessib ...

  6. combobox 属性、事件、方法

    一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...

  7. C#中combobox 控件属性、事件、方法

    一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...

  8. ime-mode:disabled 关闭文本框输入法

    在用户输入数字的表单中,需要禁止用户输入中文.符号等,减少用户输入出错误的可能性,CSS可以实现此功能. ime-mode的语法解释如下: ime-mode : auto | active | ina ...

  9. [C#] Control.Invoke方法和跨线程访问控件(转载)

    转载前,在网上找了好多INVOKE方法的文章,就这个看着还可以,明白了大概,以后再深用的时候再研究 ,废话少说上转载(连转载都说的这么有气势,哈哈)   在设计界面时,我们经常需要将一些需要时间才能完 ...

随机推荐

  1. npm 安装 react-devtools

    由于不能科学的上网.网上看资料装上了这个插件,装的过程有点坑.记录一下,希望能帮到和我一样的新手. 1.第一步,克隆下远程仓库的东西. 桌面右键,git-bash.然后输入: git clone ht ...

  2. Eclipse - servlet显示无法导入javax.servlet包问题的解决方案

    项目名-->右键 Property-->选择 Java Build Path-->选择 Add External JARs-->选择 把servlet-api.jar的路径输入 ...

  3. keepalived实现nginx反向代理的高可用

    实现keepalived调用脚本进行资源监控 keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整 vrrp_script:自定义资源监控脚本,vrrp实例根据脚 ...

  4. Linux命令——taskset

    参考:Linux taskset Command Tutorial for Beginners (with Examples) 简介 taskset命令用于设置进程(或 线程)的处理器亲和性(Proc ...

  5. Kubernetes系统基础

    Kubernetes系统基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.容器编排系统概述 1>.容器编排系统生态圈 Docker通过“镜像”机制极富创造性地解决了应用 ...

  6. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

  7. ubuntu---画图工具(类似win中的画图软件)

    参考 https://zhidao.baidu.com/question/622412096845238452.html https://jingyan.baidu.com/article/6525d ...

  8. destoon6.0搜索页熊掌号页面改造技巧【原创】

    大家都知道,DT官方是封禁搜索页的,是不让百度蜘蛛抓取的,但是搜索页又是大型网站优化的重点,今天来说说关于DT6.0搜索页熊掌号的改造方法,如果您要改造内容页面可以查看我前几期的分享! 首先要开启百度 ...

  9. ORACLE对字符串去空格处理(trim)

    首先便是这Trim函数.Trim 函数具有删除任意指定字符的功能,而去除字符串首尾空格则是trim函数被使用频率最高的一种.语法Trim ( string ) ,参数string:string类型,指 ...

  10. 一.什么是protobuf

    Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 ...