日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

输入法——讨厌的全角

發布時間:2025/3/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 输入法——讨厌的全角 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天遇到的一個輸入法全/半角的問題,大致情形如下:用戶注冊界面中對用戶名及郵箱進行驗證、驗證條件中有一項為“半角字符”,即全角字符不合法。

并且驗證錯誤時的提示信息也做的比較粗糙,提示的是什么“用戶名允許…字符,長度是多少 ”等等,而恰好沒有提示到“半角字符”。

這時候某用戶開始了一遍又一遍輸入他那全角的英文字符,然而總是注冊失敗,弄的很郁悶。

唉,用戶交互沒做好啊!再言之:WinForm里用錯誤提示大多還是用那種“小紅圈”[ErrorProvider],錯誤提示文本被隱藏了,不能被用戶直接看到。
還有當時他似乎也沒有看錯誤提示信息哦。仔細想想 這是用戶的錯嗎? 似乎也不能責怪用戶吧!

既然遇到問題了,那就解決吧。

解決思路:當滿足以下三個條件中任意一個時便自動將輸入法狀態改為半角。
1、窗體Activated 事件發生時。
2、Form_Keyup 事件,按下Ctrl + Space時。
3、Form_KeyUp 事件,按下Shift+Space時,呵呵,這樣做似乎不太好。?

這樣做基本上就可以保證用戶輸入法狀態為半角了,不知是否還有疏漏呢?

至于將輸入法狀態改為半角,我們有相關的API可以調用。
為了使用方便,特將這些封裝到工具類中,現與大家分享。

public class ControlTools
{
// 聲明一些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年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的输入法——讨厌的全角的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。