[英]C# Prevent Hotkeys while TextBox focus
我有一個包含多個C#窗體文本框的程序。 我已經為激活某些功能的整個表單設置了熱鍵。 我的問題是我的熱鍵已設置到Form KeyDown事件上,並且如果我在TextBox上寫東西,它們就會激活。
示例 :一個熱鍵可能是I。每次我將字母寫到文本框時,熱鍵都會激活。
先前的解決方案和問題 :我曾考慮過將CTRL + Hotkey之類的Key放在熱鍵的前面,但是由於CTRL + C是Windows Copy命令等,這些也存在問題。SHIFT是UpperKey按鈕。
問題 :當我在不使用表單中的所有內容的情況下寫文本框時,是否可以阻止激活熱鍵?
編輯:一些要求的代碼。 按鈕代碼來自存儲的XML文件或快捷鍵Form + Class(單獨),在其中為它們設置了一個窗口。
public Hotkeys hotkeysForm = new Hotkeys();
void Form1_KeyDown(object sender, KeyEventArgs e)
{
toggleInformation = hotkeysForm.toggleInformation;
if (e.Control && e.KeyCode == toggleInformation)
{
showInfo(true);
}
else if (e.KeyCode == toggleInformation)
{
if (!isInfoActive)
showInfo();
else
hideInfo();
}
}
如果可以解決您的問題,則應嘗試使用此技巧,創建一個擴展的文本框並在代碼中使用它。 您可以處理是否在文本框中編寫按下的鍵,也可以在hotkeyPressed檢查中進行處理。
public class ETextBox : System.Windows.Forms.TextBox
{
protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
{
if (hotKeyPressed) // this is the condition when you don't want to write in text.
{
//Do whatever you want to do in this case.
}
else
{
base.OnKeyDown(e);
}
}
}
當texbox是活動控件時,您可以禁用熱鍵。 為所有文本框添加Enter
和Leave
事件:
private void textBox_Enter(object sender, EventArgs e)
{
KeyPreview = false;
}
private void textBox_Leave(object sender, EventArgs e)
{
KeyPreview = true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.