C# 輸入框 搭配光罩使用 (模擬KEYBOARD)
1. 文字框 屬性設定
.ImeMode = System.Windows.Forms.ImeMode.Disable; //禁止 中文輸入法
.ShortcutsEnabled = false; //停用 右鍵選單 複製貼上 全形字
2. 新增 KeyPress 事件,讓掃描器輸入的英文字母不受 CapsLock 影響,且維持原始字元(不轉大寫)
private void texInputText_KeyPress(object sender, KeyPressEventArgs e)
{
// 僅針對英文字母 A-Z / a-z 處理
bool isLetter = (e.KeyChar >= 'a' && e.KeyChar <= 'z') ||
(e.KeyChar >= 'A' && e.KeyChar <= 'Z');
if (isLetter)
{
// 若 CapsLock 開啟,Windows 會自動反轉大小寫
// 為了「不受 CapsLock 影響」且「維持掃描器原始字元」,手動再反轉一次即可還原
if (Control.IsKeyLocked(Keys.CapsLock))
{
e.KeyChar = char.IsUpper(e.KeyChar) ? char.ToLower(e.KeyChar) : char.ToUpper(e.KeyChar);
}
}
}
3. 新增 TextChanged 事件,過濾掉非 ASCII 可顯示字元,避免掃描器輸入的特殊字元造成系統不穩定 防範滑鼠右鍵貼上中文
private void texInputText_TextChanged(object sender, EventArgs e)
{
// 僅保留 ASCII 可顯示字元 (含英數、符號、空白)
var filtered = new string(texInputText.Text.Where(c => c <= 127).ToArray());
if (filtered != texInputText.Text)
{
int selStart = texInputText.SelectionStart;
texInputText.Text = filtered;
texInputText.SelectionStart = selStart - 1;
}
}
沒有留言:
張貼留言