我有一个包含多个C#Forms TextBoxes的程序。我已经为整个表单设置了热键来激活某些功能。我的问题是我的热键已经设置到Form KeyDown事件,如果我在TextBox上写东西,它们会激活。
示例:一个热键可能是I.每次我将这封信写入文本框时,热键都会激活。
前面的解决方案和问题:我已经考虑过将一个Key放在热键前面,比如CTRL + Hotkey,但是这些也会出现问题,因为CTRL + C是Windows Copy命令等。 SHIFT是一个UpperKey按钮。
问题:我可以在写入TextBox时阻止热键激活而无需在表单中查看所有这些内容吗?
编辑:根据要求提供一些代码。按钮代码来自存储的XML文件或Hotkeys 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();
}
}
答案 0 :(得分:0)
你应该试试这个黑客,如果它可以解决你的问题, 创建一个Extented TextBox并在您的代码中使用它。您可以在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);
}
}
}
答案 1 :(得分:0)
您可以在文本框是活动控件时禁用热键。为所有文本框添加Enter
和Leave
个事件:
private void textBox_Enter(object sender, EventArgs e)
{
KeyPreview = false;
}
private void textBox_Leave(object sender, EventArgs e)
{
KeyPreview = true;
}