C# 切换中英文输入法
在界面输入时,有时需要限定输入法。
在不自定义正则表达式或者其它输入处理的情况下,切换中英文时与当前语言栏匹配,有以下的几种系统方案:
InputLanguage方案
使用System.Windows.Forms.InputLanguage,判断/设置当前输入法状态
1 /// <summary> 2 /// 获取当前输入法 3 /// </summary> 4 /// <returns></returns> 5 private string GetCultureType() 6 { 7 var currentInputLanguage = InputLanguage.CurrentInputLanguage; 8 var cultureInfo = currentInputLanguage.Culture; 9 //同 cultureInfo.IetfLanguageTag; 10 return cultureInfo.Name; 11 }
1 /// <summary> 2 /// 切换输入法 3 /// </summary> 4 /// <param name="cultureType">语言项,如zh-CN,en-US</param> 5 private void SwitchToLanguageMode(string cultureType) 6 { 7 var installedInputLanguages = InputLanguage.InstalledInputLanguages; 8 9 if (installedInputLanguages.Cast<InputLanguage>().Any(i => i.Culture.Name == cultureType)) 10 { 11 InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo(cultureType)); 12 CurrentLanguage = cultureType; 13 } 14 }
通过InputLanguage的设置,可以统一同一进程内的输入法。比如切换成英文输入法后,当前程序周期内一直是英文输入状态。
InputMethod附加属性
System.Windows.Input.InputMethod,API原文给的注释是:
可以提供用于管理和使用文本服务框架,它提供的替换文字,如语音和手写的输入法支持的交互功能
1. InputMethod下有依赖属性PreferredImeConversionMode,可以限定输入字符类型,同时切换语言栏的中英文状态。
-- 此属性设置了限定输入字符后,可以通过人工切换输入法,切换回其它输入法。
2.InputMethod.IsInputMethodEnabled,也可以设置中英文输入法限定
-- 一旦设置了,输入控件的输入法不可人工切换。除非重新设置IsInputMethodEnabled值。
InputMethod适合程序周期内,不同输入框分别有不同输入法的情况。
比如下面俩个文本框的输入法限定:
1 //通过InputMethod.PreferredImeConversionMode附加属性,设置输入框的输入法输入转换模式,即限定输入字符类型 2 InputMethod.SetPreferredImeConversionMode(InputTestTextBox0, ImeConversionModeValues.Alphanumeric); 3 InputMethod.SetPreferredImeConversionMode(InputTestTextBox1, ImeConversionModeValues.Native);
ImeConversionModeValues枚举值列表如下:
1 /// <summary>描述要执行的一种输入法输入转换模式。</summary> 2 [Flags] 3 public enum ImeConversionModeValues 4 { 5 /// <summary>输入的法使用本机字符 (平假名、 朝鲜语、 繁体中文) 转换模式。</summary> 6 Native = 1, 7 /// <summary>输入的法使用片假名转换模式。</summary> 8 Katakana = 2, 9 /// <summary>输入的法使用全形转换模式。</summary> 10 FullShape = 4, 11 /// <summary>输入的法使用罗马字符转换模式。</summary> 12 Roman = 8, 13 /// <summary>输入的法使用字符代码转换模式。</summary> 14 CharCode = 16, // 0x00000010 15 /// <summary>输入的方法不会执行任何输入的转换。</summary> 16 NoConversion = 32, // 0x00000020 17 /// <summary>输入的法使用 EUDC (最终用户定义的字符) 转换模式。</summary> 18 Eudc = 64, // 0x00000040 19 /// <summary>输入的法使用符号转换模式。</summary> 20 Symbol = 128, // 0x00000080 21 /// <summary>输入的法使用固定的转换模式。</summary> 22 Fixed = 256, // 0x00000100 23 /// <summary>输入的法使用字母数字的转换模式。</summary> 24 Alphanumeric = 512, // 0x00000200 25 /// <summary>输入的方法并不关心使用哪种输入的转换方法;实际的转换方法是不确定的。</summary> 26 DoNotCare = -2147483648, // -0x80000000 27 }
以上俩方案的Demo:https://github.com/Kybs0/InputLanguageTestDemo
PS:如果是winform程序,可以直接设置Control.ImeMode属性
详情可参考:https://blog.csdn.net/iluna/article/details/4903479
原文地址:https://www.cnblogs.com/aaronguo/p/11856095.html
- Spring Cloud Edgware新特性之:解决Eureka中Jersey 1.x版本过旧的问题-不使用Jersey
- 如何自定义微服务的Instance ID
- 怎样做情感分析
- Python|编写自己的类
- 碎片化 | 第四阶段-45-session为空问题解决-视频
- 以后有机会写框架用得着的
- 合并两个不相关的Git仓库
- 用 Tensorflow 建立 CNN
- 碎片化 | 第四阶段-36-struts-spring结合jdbc实现删除功能-视频
- 跨域访问支持(Spring Boot、Nginx、浏览器)
- 自己动手写个聊天机器人吧
- 碎片化 | 第四阶段-37-sturts2-登录功能实现-视频
- Spring Cloud Edgware新特性之六:Artifact ID变更
- 用 RNN 训练语言模型生成文本
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【技术创作101训练营】innerHTML插入运行js字符串问题探究
- 组合体惯量法A: matlab程序—机械臂动力学建模
- vue+echarts 实现两个小例子
- 2020CV秋招求职的若干思考
- 快速学习-ElasticJob高可用
- 快速学习-Elastic调度部署
- 快速学习-ElasticJob应用API
- 快速学习-ElasticJob-Lite Quick Start
- 快速学习-ElasticJob-Cloud Quick Start
- @JacksonInject与@JsonAlias注解-JSON框架Jackson精解第4篇
- 医疗NLP相关数据集整理
- 我们如何用 K8S 搞定 1000 个应用的测试环境
- 如何实现rsync多并发同步?
- 分享Linux内存占用几个案例
- 30个编程小技巧,提高代码性能