本文经原作者授权以原创方式二次分享,欢迎转载、分享。
原文作者:唐宋元明清
原文地址:https://www.cnblogs.com/kybs0/p/10298697.html
C# 切换中英文输入法
在界面输入时,有时需要限定输入法。
在不自定义正则表达式或者其它输入处理的情况下,切换中英文时与当前语言栏匹配,有以下的几种系统方案:
InputLanguage方案
-
使用System.Windows.Forms.InputLanguage[1],判断/设置当前输入法状态; -
获取当前输入法
/// <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 = 1,
/// <summary>输入的法使用片假名转换模式。</summary>
Katakana = 2,
/// <summary>输入的法使用全形转换模式。</summary>
FullShape = 4,
/// <summary>输入的法使用罗马字符转换模式。</summary>
Roman = 8,
/// <summary>输入的法使用字符代码转换模式。</summary>
CharCode = 16, // 0x00000010
/// <summary>输入的方法不会执行任何输入的转换。</summary>
NoConversion = 32, // 0x00000020
/// <summary>输入的法使用 EUDC (最终用户定义的字符) 转换模式。</summary>
Eudc = 64, // 0x00000040
/// <summary>输入的法使用符号转换模式。</summary>
Symbol = 128, // 0x00000080
/// <summary>输入的法使用固定的转换模式。</summary>
Fixed = 256, // 0x00000100
/// <summary>输入的法使用字母数字的转换模式。</summary>
Alphanumeric = 512, // 0x00000200
/// <summary>输入的方法并不关心使用哪种输入的转换方法;实际的转换方法是不确定的。</summary>
DoNotCare = -2147483648, // -0x80000000
}
以上俩方案的Demo源码[2]:
PS:如果是winform
程序,可以直接设置Control.ImeMode
属性
参考[3]
参考资料
System.Windows.Forms.InputLanguage: https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.inputlanguage?view=netframework-4.7.2
[2]Demo源码: https://github.com/Kybs0/InputLanguageTestDemo
[3]详情可参考: https://blog.csdn.net/iluna/article/details/4903479
原文始发于微信公众号(WPF开发者):C# 切换中英文输入法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/55094.html