[英]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.