在容许输入中文的情况下,比如姓名,自动打开中文输入法:
而在非中文输入的情况下,如年龄,自动关闭中文输入法状态:
那么,这样的需求我们如何实现呢,实现的方法或者很多,我只说IExtenderProvider扩展实现的方法,在AgileEAS.NET平台中集成了一个叫ChineseLanguageInput的小组件来完成这个功能,下面我就把ChineseLanguageInput的实现跟大家看看:
[ToolboxItem(true)] [Description("输入法控件与自动切换组件")] [ProvideProperty("Language", typeof(Component))] public class ChineseLanguageInput:Component, IExtenderProvider { private DictionaryinputLanguageList = new Dictionary (); private InputLanguage input = InputLanguage.CurrentInputLanguage; public ChineseLanguageInput() { } public ChineseLanguageInput(System.ComponentModel.IContainer container) { container.Add(this); } [Category("输入法")] [Description("获取/设置控件的输入法状态")] public Language GetLanguage(Control component) { if( inputLanguageList.Contains( component )) { return (Language)inputLanguageList[ component ]; } return Language.Default; } public void SetLanguage(Control component, Language c) { if (inputLanguageList.Contains(component) != true) { inputLanguageList.Add(component, c); System.Windows.Forms.Control currentC = (System.Windows.Forms.Control)component; currentC.Enter += new EventHandler(this.currentC_Enter); } else { inputLanguageList[component] = c; } } private void currentC_Enter(object sender, EventArgs e) { System.Windows.Forms.Control control = (System.Windows.Forms.Control)sender; if (this.GetLanguage(control) == Language.Chinese) { InputLanguage.CurrentInputLanguage = this.input; } else if (this.GetLanguage(control) == Language.English) { if (!object.Equals(InputLanguage.CurrentInputLanguage, InputLanguage.InstalledInputLanguages[0])) { this.input = InputLanguage.CurrentInputLanguage; } InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages[0]; } } #region IExtenderProvider 成员 bool IExtenderProvider.CanExtend(object component) { return component is System.Windows.Forms.Control; } #endregion }
这里还用到一个类型Language:
////// 输入法语言。 /// public enum Language { /// /// 默认,不管他。 /// Default = 0, /// /// 英文输入法状态。 /// English = 1, /// /// 中文输入法状态。 /// Chinese = 2 }
上面就是ChineseLanguageInput组件的所有源码,怎么用呢,一样的方式,拖上面,在控件上设计输入法状态:
就弄到这吧,也不搞个demo了,组件源码都贴了,朋友们自己试吧。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-671059/ ,如需转载,请注明出处,否则将追究法律责任。