更人性化地控制用户输入(1 of n)
通过设置限制"全角"输入。
几年前,我在net 1.0上做一个项目,交付之后客户总是说模糊搜索出来的数据不准确。翻看代码,没问题!看看日志,也没问题!运行测试,没报错。最后只好跑到客户那里看个究竟,一天输入的数千份单据中如果按目的地去查是总数是10,如果按照操作员(一个目的地由只由一个操作员录入)去查,总数却是35,实际上应该是35。天啊是什么回事?查了下数据库,原来是中文输入法惹的祸。目的地的正确地址是"H.K. AirPort",数据库却出现了大量的"H。K。AirPort"。由于那时经验不足,这个问题通过编程序去解决的,自动将字符串里的标点符号去掉或换成半角符号。代码写了一大段,效率却很差,很不爽。没过几天,我在MSDN上得到了这个解决方法
现在我向大家推荐这个方法:设置Control的属性ImeMode,指定这个值可以控制输入法编辑器 (IME) 的状态。
例如,在一个窗体里,有两个TextBox,第一个TextBox(name="cnTextBox",TabIndex=0)输入的要求输入中文名,第二个TextBox(name="enTextBox" ,TabIndex=1)要求输入英文。按照用户的习惯,输入完cnTextBox,焦点就切换到 enTextBox,如果用户不切换输入法状态,就很有可能在enTextBox输入的是全角字符;而且用户频繁切换输入法就不能满足快速录入的要求。
那么,我们可以这样设定属性:
cnTextBox. ImeMode= ImeMode. On;
enTextBox. ImeMode= ImeMode .Disable;
测试一下,无论输入法是什么状态,只要焦点到enTextBox,输入法都会停止工作;焦点离开enTextBox,输入法的又恢复到切入前的状态了。
ImeMode还有多个取值,各有不同的用处(引用MSDN):
public enum ImeMode
{
Inherit, //继承父控件的 IME 模式。
NoControl, //无(默认)。
On, // IME 已打开。此值指示 IME 已打开,可以输入中文或日语特定的字符。此值仅对日语、简体中文和繁体中文 IME 有效。
Off, // IME 已关闭。此模式指示 IME 已关闭,这意味着该对象的行为方式与英语输入模式相同。此值仅对日语、简体中文和繁体中文 IME 有效。
Disable, // IME 被禁用。如果使用此值,则用户无法从键盘打开 IME,而且 IME 浮动窗口处于隐藏状态。
Hiragana, // 平假名 DBC。此值仅对日语 IME 有效。
Katakana, // 片假名 DBC。此值仅对日语 IME 有效。
KatakanaHalf, // 片假名 SBC。此值仅对日语 IME 有效。
AlphaFull, // 字母数字双字节字符。此值仅对朝鲜语和日语 IME 有效。
Alpha, // 字母数字单字节字符 (SBC)。此值仅对朝鲜语和日语 IME 有效。
HangulFull, // 朝鲜文 DBC。此值仅对朝鲜语 IME 有效。
Hangul, // 朝鲜文 SBC。此值仅对朝鲜语 IME 有效。
Close,
OnHalf
}