输入法——讨厌的全角
生活随笔
收集整理的這篇文章主要介紹了
输入法——讨厌的全角
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天遇到的一個輸入法全/半角的問題,大致情形如下:用戶注冊界面中對用戶名及郵箱進行驗證、驗證條件中有一項為“半角字符”,即全角字符不合法。
并且驗證錯誤時的提示信息也做的比較粗糙,提示的是什么“用戶名允許…字符,長度是多少 ”等等,而恰好沒有提示到“半角字符”。
這時候某用戶開始了一遍又一遍輸入他那全角的英文字符,然而總是注冊失敗,弄的很郁悶。
唉,用戶交互沒做好啊!再言之:WinForm里用錯誤提示大多還是用那種“小紅圈”[ErrorProvider],錯誤提示文本被隱藏了,不能被用戶直接看到。
還有當時他似乎也沒有看錯誤提示信息哦。仔細想想 這是用戶的錯嗎? 似乎也不能責怪用戶吧!
既然遇到問題了,那就解決吧。
解決思路:當滿足以下三個條件中任意一個時便自動將輸入法狀態改為半角。
1、窗體Activated 事件發生時。
2、Form_Keyup 事件,按下Ctrl + Space時。
3、Form_KeyUp 事件,按下Shift+Space時,呵呵,這樣做似乎不太好。?
這樣做基本上就可以保證用戶輸入法狀態為半角了,不知是否還有疏漏呢?
至于將輸入法狀態改為半角,我們有相關的API可以調用。
為了使用方便,特將這些封裝到工具類中,現與大家分享。
{
// 聲明一些API函數
[DllImport("imm32.dll")]
public static extern IntPtr ImmGetContext(IntPtr hwnd);
[DllImport("imm32.dll")]
public static extern bool ImmGetOpenStatus(IntPtr himc);
// 暫時沒有用到,覺得這個API似乎有問題。
[DllImport("imm32.dll")]
public static extern bool ImmSetOpenStatus(IntPtr himc, bool b); [DllImport("imm32.dll")]
public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2);
[DllImport("imm32.dll")]
public static extern int ImmSimulateHotKey(IntPtr hwnd, int lngHotkey);
private const int IME_CMODE_FULLSHAPE = 0x8;
private const int IME_CHOTKEY_SHAPE_TOGGLE = 0x11;
private Form mFrm;
public ControlTools(Form frm)
{
this.mFrm = frm;
} // 輸入法全角轉半角
public void FullToHalf()
{
this.mFrm.KeyPreview = true;
this.mFrm.Activated += new EventHandler(mFrm_Activated);
this.mFrm.KeyUp += new KeyEventHandler(mFrm_KeyUp);
}
private void mFrm_KeyUp(object sender, KeyEventArgs e)
{
if ((e.Control || e.Shift) && e.KeyCode == Keys.Space)
{
this.mFrm_Activated(null, null);
}
}
private void mFrm_Activated(object sender, EventArgs e)
{
try
{
IntPtr HIme = ImmGetContext(this.mFrm.Handle);
// 如果輸入法處于打開狀態
if (!ImmGetOpenStatus(HIme))
{
return;
}
int iMode = 0;
int iSentence = 0;
// 檢索輸入法信息
bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);
if (bSuccess)
{
// 如果是全角,轉換成半角
if ((iMode & IME_CMODE_FULLSHAPE) > 0)
{
ImmSimulateHotKey(this.mFrm.Handle, IME_CHOTKEY_SHAPE_TOGGLE);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
} 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的输入法——讨厌的全角的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构基础(17) --二叉查找树的
- 下一篇: 开源监控软件ganglia安装手册