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

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

一、Control.ImeMode 属性:获取或设置控件的输入法编辑器 (IME) 模式。

(1)由于窗体属性继承关系,如果你的WINFORM窗体中大部分需要设置为输入法有效状态,可以设置为FORM的ImeMode属性为On.
(2)如果需要某些TextBox为输入法有效,则使用ImeMode.On
(3)如果需要设置整个窗体的输入法全部为半角,可以使用以下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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 使用描述单个字符或成组字符的基字符序列,以便允许您输入范围较广的一组字符。基字符可以是来自朝鲜文音节的成分字母、日语汉字字符的拼音成分,或者中文字符的各种组合。

三、如果设置为合适的输入法?

这里仅给一个例子,打击可以举一返三:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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#程序设计有所帮助。

C#中Winfrom默认输入法的设置方法相关推荐

  1. 计算机自带输入法在哪里设置方法,Windows7设置默认输入法_Win7默认输入法怎么设置?-192路由网...

    在Windows 7电脑中怎么设置默认输入法?安装Windows 7系统后,系统会自带几种输入法,但是系统自带的输入法不太符合国人的使用习惯.因此,很多用户都会选择再安装一个自己使用习惯的输入法,有的 ...

  2. Android 7.1.2 默认输入法的设置流程分析与修改

    一.默认输入法的设置流程分析 设置流程分析 1.  Android系统开机后,当ActivityManagerService及PackageManagerService都ready后,systemse ...

  3. Win10系统切换输入法快捷键设置方法

    无论是家用电脑还是办公电脑,一般都没有单一的输入法.有些人每次使用时都必须使用鼠标单击,其实真的很麻烦.Windows10系统切换输入法与以往的都不同,Win10系统如何修改切换输入法按键?就此问题, ...

  4. 如何更改html的默认应用,win10更改默认打开程序设置方法_win10怎么更改应用默认打开方式-win7之家...

    在使用win10系统过程中,对于一些需要借助工具才能够打开的文件,我们每次在打开之前都会有一个选择打开的程序,对此有些用户就想要将其设置成默认打开方式,以此来较少一些不必要的选择,那么win10怎么更 ...

  5. win7系统语言栏默认输入法怎么设置教学分享

    win7系统语言栏默认输入法怎么设置教学分享.在使用电脑的时候,每一个用户都有自己的输入法使用爱好.那么我们如何去将自己比较喜欢使用的输入法设置成为我们的系统默认输入法来进行使用呢?接下来一起看看具体 ...

  6. php中session时间,php中session过期时间的设置方法

    php中session过期时间的设置方法 发布时间:2020-04-22 10:21:19 来源:亿速云 阅读:140 作者:小新 今天小编给大家分享的是php中session过期时间的设置方法,相信 ...

  7. dw怎么修改html框架的宽度,Dreamweaver (dw)cs6中div标签宽度和高度设置方法

    很多用户给小编留言说dw cs6中div标签宽度和高度怎么设置?Dreamweaver cs6中div标签想要设置高度和宽度,该怎么设置呢?今天脚本之家小编就给大家带来Dreamweaver (dw) ...

  8. android 6.0 默认输入法,Android中系统默认输入法设置的方法(输入法的显示和隐藏)...

    1.调用显示系统默认的输入法 方法一. inputmethodmanager imm = (inputmethodmanager) getsystemservice(context.input_met ...

  9. 怎样设置计算机默认字体及语言,电脑中默认输入法如何设置 Win7系统设置默认输入法技巧...

    电脑中默认的输入法一般是美式键盘,也就是说每次我们需要打字的时候都需要切换到到中文输入法,如大家比较常用的五笔.智能ABC或者搜狗拼音等输入法状态,这给我们带了不便,每次打字都需要切换一下很麻烦,下面 ...

最新文章

  1. 极客新闻——04、WiFi万能钥匙万玉权:管理应该是“自下而上”
  2. windows下使用Jenkins搭建CI持续集成平台(版本源码管理使用SVN)
  3. 因为名字叫True,她被苹果iCloud服务器拒绝了
  4. 可做fft分析吗_小吃店生意好做吗,小吃业行情分析
  5. 鸿蒙系统年底发布?华为人员看到这个山寨网站笑了
  6. golang goroutine实现_golang中的Mutex设计原理详解(一)
  7. springboot - 问与答
  8. tde数据库加密_如何将TDE加密的用户数据库添加到Always On可用性组
  9. linux环境下通过nginx实现tomcat集群
  10. 解析Hibernate中的持久化—ORM
  11. Vs2010 上的配置Opencv2.2
  12. 基于STM32F405平台的多摩川协议编码器通讯过程(2)
  13. OpenCV | 训练识别狗的分类器过程详解
  14. 计算机原理 做实验报告,微机原理实验报告心得体会
  15. 2022牛客寒假训练营1-K冒险公社
  16. Java 五子棋(一)绘制棋盘、棋子
  17. ultimate++使用_使用Ultimate Custom Widget个性化您的Android主屏幕
  18. jquery实现电商网站分类导航菜单
  19. Java实现字母去重
  20. Galaxy S4 GT-I9500如何root 安卓5.0.1

热门文章

  1. 使用信号量机制解决生产者消费者问题
  2. mysql删除多个索引
  3. CTF密码学(Crypto)一些在线解密网站
  4. 使用Python读取LabVIEW TDMS 格式文件转成Excel格式+多进程版本
  5. 2020年 网络 “十大热词” 出炉,你熟悉哪些?
  6. 计算机含金量最高的证书
  7. 建立自定义的YouTube播放列表播放器
  8. 印能捷服务器系统怎么装,Prinergy印能捷JTP全自动建立工具(32/64bit)
  9. ps与grep组合命令使用
  10. CUDA安装失败问题visual studio integration failed问题解决方案