zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )
    速度之王 — LZ4压缩算法(三)
    lz4,pigz,gzip 3者比较
    用php实现百度网盘图片直链的代码分享
    hibernate的oracle配置(转)
    过滤器
    dom4j创建格式化的xml文件
    jstl表达式
    jsp内置对象和el表达式
    jsp 三大指令和动作标签
  • 原文地址:https://www.cnblogs.com/aaronguo/p/11856095.html
Copyright © 2011-2022 走看看