在界面输入时,有时需要限定输入法。

在不自定义正则表达式或者其它输入处理的情况下,切换中英文时与当前语言栏匹配,有以下的几种系统方案:

InputLanguage方案

使用System.Windows.Forms.InputLanguage,判断/设置当前输入法状态

     /// <summary>
/// 获取当前输入法
/// </summary>
/// <returns></returns>
private string GetCultureType()
{
var currentInputLanguage = InputLanguage.CurrentInputLanguage;
var cultureInfo = currentInputLanguage.Culture;
//同 cultureInfo.IetfLanguageTag;
return cultureInfo.Name;
}
     /// <summary>
/// 切换输入法
/// </summary>
/// <param name="cultureType">语言项,如zh-CN,en-US</param>
private void SwitchToLanguageMode(string cultureType)
{
var installedInputLanguages = InputLanguage.InstalledInputLanguages; if (installedInputLanguages.Cast<InputLanguage>().Any(i => i.Culture.Name == cultureType))
{
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo(cultureType));
CurrentLanguage = cultureType;
}
}

通过InputLanguage的设置,可以统一同一进程内的输入法。比如切换成英文输入法后,当前程序周期内一直是英文输入状态。

InputMethod附加属性

System.Windows.Input.InputMethod,API原文给的注释是:

可以提供用于管理和使用文本服务框架,它提供的替换文字,如语音和手写的输入法支持的交互功能

1. InputMethod下有依赖属性PreferredImeConversionMode,可以限定输入字符类型,同时切换语言栏的中英文状态。

-- 此属性设置了限定输入字符后,可以通过人工切换输入法,切换回其它输入法。

2.InputMethod.IsInputMethodEnabled,也可以设置中英文输入法限定

-- 一旦设置了,输入控件的输入法不可人工切换。除非重新设置IsInputMethodEnabled值。

InputMethod适合程序周期内,不同输入框分别有不同输入法的情况。

比如下面俩个文本框的输入法限定:

     //通过InputMethod.PreferredImeConversionMode附加属性,设置输入框的输入法输入转换模式,即限定输入字符类型
InputMethod.SetPreferredImeConversionMode(InputTestTextBox0, ImeConversionModeValues.Alphanumeric);
InputMethod.SetPreferredImeConversionMode(InputTestTextBox1, ImeConversionModeValues.Native);

ImeConversionModeValues枚举值列表如下:

   /// <summary>描述要执行的一种输入法输入转换模式。</summary>
[Flags]
public enum ImeConversionModeValues
{
/// <summary>输入的法使用本机字符 (平假名、 朝鲜语、 繁体中文) 转换模式。</summary>
Native = ,
/// <summary>输入的法使用片假名转换模式。</summary>
Katakana = ,
/// <summary>输入的法使用全形转换模式。</summary>
FullShape = ,
/// <summary>输入的法使用罗马字符转换模式。</summary>
Roman = ,
/// <summary>输入的法使用字符代码转换模式。</summary>
CharCode = , // 0x00000010
/// <summary>输入的方法不会执行任何输入的转换。</summary>
NoConversion = , // 0x00000020
/// <summary>输入的法使用 EUDC (最终用户定义的字符) 转换模式。</summary>
Eudc = , // 0x00000040
/// <summary>输入的法使用符号转换模式。</summary>
Symbol = , // 0x00000080
/// <summary>输入的法使用固定的转换模式。</summary>
Fixed = , // 0x00000100
/// <summary>输入的法使用字母数字的转换模式。</summary>
Alphanumeric = , // 0x00000200
/// <summary>输入的方法并不关心使用哪种输入的转换方法;实际的转换方法是不确定的。</summary>
DoNotCare = -, // -0x80000000
}

以上俩方案的Demo:https://github.com/Kybs0/InputLanguageTestDemo

PS:如果是winform程序,可以直接设置Control.ImeMode属性

详情可参考:https://blog.csdn.net/iluna/article/details/4903479

C# 切换中英文输入法的更多相关文章

  1. AutoCAD神器! AutoCAD自动切换中英文输入法插件(ZDSRF)

    AutoCAD神器! AutoCAD自动切换中英文输入法插件 (一)功能特点: CAD命令中只能输入英文字符,不能输入中文,在文字编辑.文字输入.尺寸编辑中经常需要输入中文,此时就需要频繁的切换输入法 ...

  2. unbuntu中如何像Windows一样顺畅的切换中英文输入法

    1.首先在unbuntu安装搜狗拼音输入法(这个不用教了) 2.点击右上角的搜狗拼音的图标点击设置进入设置页面 3.选择高级 4.选择Fcitx设置 5.添加输入法英语(美国) 6.在设置中选择按键, ...

  3. CentOS7 解决不能切换中英文输入法的问题

    1. 运行 im-chooser(如果没有要先安装) $ im-chooser 2. 在打开的窗口选择 iBus,然后 Logout 再 Login, 输入法即可切换.

  4. Centos 切换中文输入法

    切换输入法看起来是一个非常简单的操作,但是对于初学者来说,也并非那么简单,开始会发现按Ctrl+space无法切换中文输入法,原因是系统没有安装中文输入法,运行以下命令可以安装中文输入法: yum i ...

  5. Mac OS 10.12 - 在VMwear Workstation12.5.2中大写键和中英文输入法的切换!

    大小写切换: Alt+CapsLock(不过必须在英文状态下)!! 输入法切换: CapsLock进行中英文输入法的切换

  6. Mac OS 10.12 - 如何能够像在Windows一样切换中英文输入法和大小写键?

    最开始,我切换中英文输入法和大小写键是按照下面博客做到的: http://www.cnblogs.com/sunylat/p/6415563.html 但是当我安装完毕搜狗输入法后,切换中英文输入法和 ...

  7. ubuntu16.04上在使用搜狗输入法时,按shift不能正常切换中英文

    问题描述: ubuntu16.04上在使用搜狗输入法时,不知道把什么组合键给错按了,导致了按shift不能正常切换中英文,这是一件很烦恼的事儿! 解决步骤: 1,终端输入打开: fcitx-confi ...

  8. Eclipse汉化后怎么改回英文版(可切换中英文)

    Eclipse汉化后怎么改回英文版(可切换中英文) 很多朋友将MyEclipse汉化后还想改回英文的,其实只要修改MyEclipse的配置文件就可以了,这里我以MyEclipse7.0为例演示一下如何 ...

  9. Internet Explorer 11(IE11)无法切换第三方输入法

    Windows 8.1搭载了新的IE11版本,还发布了IE11 for Windows 7. IE11除了支持全尺寸Win设备以外,还比IE10更快速流畅,支持3D等高性能的浏览体验.全新F12开发者 ...

随机推荐

  1. zipkin+kafka+elasticsearch

    1.安装zookeeper(3.4.6) 安装过程(略) 启动zookeeper ./bin/zkServer.sh start 或者bin/zookeeper-server-start.sh con ...

  2. js 的 骚操作

    单行的js 代码虽然简洁,但却不易维护,甚至难以理解, 但这却并不影响前端童鞋们编写简洁代码的热情, 一   , 生成随机ID // 生成长度为10的随机字母数字字符串 Math.random().t ...

  3. Boosting(提升方法)之XGBoost

    XGBoost是一个机器学习味道非常浓厚的模型,在数学上非常规范,运用正则化.L2范数.二阶梯度.泰勒公式和分布式计算方法,对GBDT等提升树模型进行优化,不仅能处理更大规模的数据,而且运行效率特别高 ...

  4. 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)

     注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...

  5. 【极简版】SpringBoot+SpringData JPA 管理系统

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBo ...

  6. aps .net MVC单用户登录

    当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线. 原文地址:http://www.cnblogs.com/f23wangj/p/4984302.htm ...

  7. JavaScript 原型的深入指南

    摘要: 理解prototype. 原文:JavaScript 原型的深入指南 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 不学会怎么处理对象,你在 JavaScript 道路就就走 ...

  8. 5G 时代,可能是什么样呢?

        (摄于上海陆家嘴) 众所周知,5g时代即将到来,其相关的区块链技术也将在更多的领域以及方面发挥越来越多的作用. 与新模式与新领域这种软性变化不同,新技术的产生,有着足够的想象空间.仅从内容创作 ...

  9. js导出excel表格并生成多sheet

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 查找最近公共祖先(LCA)

    一.问题 求有根树的任意两个节点的最近公共祖先(一般来说都是指二叉树).最近公共祖先简称LCA(Lowest Common Ancestor).例如,如下图一棵普通的二叉树. 结点3和结点4的最近公共 ...