ime的bug导致本来屏蔽了输入法的也可以输入。这样,一个数字类型的控件也就输入了汉字等等,并且在textchanged里处理也不是很好,麻烦。所以我借助了win32的消息来处理ime的事件。
当输入法输入完成时会发送WM_IME_CHAR消息,我们可以通过捕捉它来控制输入的合法性。
protected void WinProc(ref Message m)
{
int val = m.WParm.ToInt32();
if(m.Msg == 0x286)//0x286为WM_IME_CHAR消息
{
Char a = Convert.ToChar(val
if(val >= 0 && val <=255 )
{
//ok
}
else if(val>=65281 && val<=65374)
{//全角拉丁字符的时候,转换为半角的拉丁字符
val = 33+val-65281;
}
else
{
//其他汉字全部屏蔽掉
return;
}
//具体处理
}
}