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

本文实例讲述了C#中Winfrom默认输入法的设置方法。分享给大家供大家参考。具体分析如下:

在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());
  }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C#实现输入法功能详解

    虽说输入法不是什么新事物,各种语言版本都有,不过在C#不常见:这就会给人一种误会:C#不能做!其实C#能不能做呢,答案是肯定的--三种方式都行:IMM.TSF以及外挂式.IMM这种就是调windows的一些底层api,不过在新版本的windows中基本上已经不能用了,属于一种过时的操作方式.TSF是微软推荐的一种新方式,不过相对C#资料太少:线上主要的一些都是针对C++的版本资料,当然可以作为借鉴来实现C#版的.我这里主要介绍一种外挂式的(天啦撸,C#可以写外挂?),对于高手来说肯定不值一提,不

  • C#设置输入法实例分析

    本文实例讲述了C#设置输入法的方法.分享给大家供大家参考.具体如下: private void Form1_Load(object sender, System.EventArgs e) { //获取输入法信息 //获取系统中已经安装的文字输入法 InputLanguageCollection MyInputs=InputLanguage.InstalledInputLanguages; //将输入法的名称添加组合框中 foreach(InputLanguage MyInput in MyInp

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

    本文实例讲述了C#中Winfrom默认输入法的设置方法.分享给大家供大家参考.具体分析如下: 在WINFORM中我们经常遇到文本输入框中输入法被禁用或老是变全角输入法等问题,经查阅相关资料,现小结如下: 一.Control.ImeMode 属性:获取或设置控件的输入法编辑器 (IME) 模式. (1)由于窗体属性继承关系,如果你的WINFORM窗体中大部分需要设置为输入法有效状态,可以设置为FORM的ImeMode属性为On. (2)如果需要某些TextBox为输入法有效,则使用ImeMode.

  • 在django中,关于session的通用设置方法

    最近发现session的知识有点脱节了,默认设置愣是搞半天,看来忘了不少.今天把一些通用设置贴上来,以备随时回顾. 配置文件中设置默认操作(通用配置): SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认) SESSION_COOKIE_DOMAIN

  • Eclipse中改变默认的workspace的方法及说明详解

    eclipse中改变默然的workspace的方法可以有以下几种: 1.在创建project的时候,手动选择使用新的workspace,如创建一个web project,在向导中的Location选项,取消使用"Use default location",同时在下面选择新的workspace. 2.在file菜单中选择switch workspace项,即可选择一个新的workspace 3.在eclipse安装目录下configuration/.settings目录下的 org.ec

  • Android中系统默认输入法设置的方法(输入法的显示和隐藏)

    1.调用显示系统默认的输入法 方法一. InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(m_receiverView(接受软键盘输入的视图(View)),InputMethodManager.SHOW_FORCED(提供当前操作的标记,SHOW_FORCED表示强制显示)); 方法二. InputMethodManager

  • IIS中保持HTTP连接的设置方法

    大多数 Web 浏览器要求服务器在多个请求中保持连接打开.这被称为保持 HTTP 连接.保持连接是一个 HTTP 规范,它能够显著增强服务器性能.如果没有它,浏览器将必须为包含多个元素(如图形)的页进行大量的连接请求.可能需要为每个元素进行单独连接.这些额外的请求和连接要求额外的服务器活动和资源,这将会降低服务器的效率.它们还会大大降低浏览器的速度和响应能力,尤其是在网络连接速度较慢的地方. 在安装进程中,将默认启用保持 HTTP 连接.启用后,保持连接的持续时间是连接超时设置允许的时间. 集成

  • PHP配置文件php.ini中打开错误报告的设置方法

    打开PHP的错误报告的方法,供大家参考. php.ini 文件中有许多配置设置.您应当已经设置好自己的 php.ini 文件并把它放在合适的目录中,就像在 Linux 上安装 PHP 和 Apache 2 的文档说明中所示的那样. 在调试 PHP 应用程序时,应当知道两个配置变量.下面是这两个变量及其默认值: 复制代码 代码如下: display_errors = Off error_reporting = E_ALL 通过在 php.ini 文件中搜索它们,可以发现这两个变量当前的默认值.di

  • sql server 2000中禁止创建表(权限设置方法)

    最近帮网站管理服务器的时候,发现一个sqlserver数据库中被创建了D99_CMD .D99_Tmp .D99_REG,网站安全也做了不少了,不知道哪里出的问题,这里先分享下临时解决方法 1.禁止创建数据库表 在要禁止的数据上,例如(jb51net) 右键 >属性 >权限 2.结合macfee禁止创建用户,修改asp php文件等.具体的大家可以参考我们以前的文章. 3.测试能否正常创建表 conn.execute("create table dxytmp(name varchar

  • ubuntu中swap(虚拟内存)设置方法

    ubuntu(虚拟机)版本16.04 LTS 添加swap 用free查看swap分区大小 free -m 创建一个swap文件夹 mkdir swap cd swap sudo dd if=/dev/zero of=swapfile bs=1024 count=100000 其中count的大小对应swap的大小,如上述代码所示count=100000为大约100M 注:设置count值时要注意,如果设置swap大小超过硬盘大小,会导致设置完重启后,虚拟机ubuntu的图形界面进不去 把生成的

  • Visual Studio中的jQuery智能提示设置方法

    1.VS2008 1) 安装VS2008 SP1补丁,下载链接.SP1补丁提供Javascript脚本库的智能提示功能. 2) 安装KB958502补丁,下载链接.KB958502补丁支持-vsdoc.js智能提示文件的关联功能,更多说明. 3) 下载jQuery原文件及-vsdoc.js文件,并通过相同的文件名前缀进行关联. 例,下载jquery-1.2.6.js和jquery-1.2.6-vsdoc.js, 拷贝到本地目录并引入到Web应用程序或Web站点的工程中. 现在你只需要添加jque

  • ThinkPHP中自定义目录结构的设置方法

    效果如图所示: 入口文件 <?php // 应用入口文件 // 检测PHP环境 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 网站文件入口位置 define('ABSPATH', dirname(__FILE__) . '/'); // 定义应用目录 define('APP_NAME', 'WEBSITE'); define('APP_PATH','./include/'); d

随机推荐