您的位置:首页 > 编程语言

NET快速开发实践之应用IExtenderProvider实现输入法自动切换

2011-05-08 22:49 686 查看
我在前面的.NET快速开发实践中的IExtenderProvider扩展组件.NET快速开发实践之应用IExtenderProvider实现对象与UI控件的绑定两篇Post介绍了IExtenderProvider扩展编程模式和应用IExtenderProvider实现实体与对象的做法与例子,下面我为介绍一下在管理信息系统开发中一个常用的功能,输入法的切换,很多在线事务处理系统业务量非常的繁忙,在特定的某个时刻,比如在his应用中的挂号、收费,窗口业务中业务办理者排着长长的队,这样就对系统的办事速度有着严格的要求,软件UI上,有的地方需要在中文输入法状态输入汉字,但有的要求在非中文输入法状态中完成,比如数字类的输入,在中文状态下输入的是全角数字,在这种应用情况下,我们需求达到下图的效果:
在容许输入中文的情况下,比如姓名,自动打开中文输入法:



而在非中文输入的情况下,如年龄,自动关闭中文输入法状态:




那么,这样的需求我们如何实现呢,实现的方法或者很多,我只说IExtenderProvider扩展实现的方法,在AgileEAS.NET平台中集成了一个叫ChineseLanguageInput的小组件来完成这个功能,下面我就把ChineseLanguageInput的实现跟大家看看:
[ToolboxItem(true)]
[Description("输入法控件与自动切换组件")]
[ProvideProperty("Language", typeof(Component))]
public class ChineseLanguageInput:Component, IExtenderProvider
{
private Dictionary<Control, InputLanguage> inputLanguageList = new Dictionary<Control, InputLanguage>();
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:

/// <summary>
/// 输入法语言。
/// </summary>
public enum Language
{
/// <summary>
/// 默认,不管他。
/// </summary>
Default = 0,
/// <summary>
/// 英文输入法状态。
/// </summary>
English = 1,
/// <summary>
/// 中文输入法状态。
/// </summary>
Chinese = 2
}


上面就是ChineseLanguageInput组件的所有源码,怎么用呢,一样的方式,拖上面,在控件上设计输入法状态:



就弄到这吧,也不搞个demo了,组件源码都贴了,朋友们自己试吧。
QQ群:120661978,125643764
链接:AgileEAS.NET应用开发平台介绍
AgileEAS.NET之敏捷并行开发方法
敏捷软件工程实验室
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐