C# 在 TextBox 焦点时防止热键
C# Prevent Hotkeys while TextBox focus
我有一个包含多个 C# 窗体文本框的程序。我已经为激活某些功能的整个表单设置了热键。我的问题是我的热键已设置到 Form KeyDown 事件上,如果我在 TextBox 上写东西,它们就会激活。
示例:一个热键可能是 I。每次我将字母写到文本框时,热键都会激活。
其他解决方案和问题:我想过在Hotkey前面放一个Key,比如CTRL+Hotkey,但是这些也存在问题,因为CTRL+C是Windows 复制命令等。SHIFT 是一个 UpperKey 按钮。
问题:当我在 TextBox 上写字时,我是否可以阻止热键激活而不必在表单中遍历所有热键?
编辑: 请求的一些代码。按钮代码来自存储的 XML 文件或 Hotkeys Form+Class(单独),我在其中为它们设置了 window。
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();
}
}
你应该试试这个 hack,如果它能解决你的问题,
创建一个扩展文本框并在您的代码中使用它。你可以在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);
}
}
}
当文本框是活动控件时,您可以禁用热键。为所有文本框添加 Enter
和 Leave
事件:
private void textBox_Enter(object sender, EventArgs e)
{
KeyPreview = false;
}
private void textBox_Leave(object sender, EventArgs e)
{
KeyPreview = true;
}
我有一个包含多个 C# 窗体文本框的程序。我已经为激活某些功能的整个表单设置了热键。我的问题是我的热键已设置到 Form KeyDown 事件上,如果我在 TextBox 上写东西,它们就会激活。
示例:一个热键可能是 I。每次我将字母写到文本框时,热键都会激活。
其他解决方案和问题:我想过在Hotkey前面放一个Key,比如CTRL+Hotkey,但是这些也存在问题,因为CTRL+C是Windows 复制命令等。SHIFT 是一个 UpperKey 按钮。
问题:当我在 TextBox 上写字时,我是否可以阻止热键激活而不必在表单中遍历所有热键?
编辑: 请求的一些代码。按钮代码来自存储的 XML 文件或 Hotkeys Form+Class(单独),我在其中为它们设置了 window。
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();
}
}
你应该试试这个 hack,如果它能解决你的问题, 创建一个扩展文本框并在您的代码中使用它。你可以在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);
}
}
}
当文本框是活动控件时,您可以禁用热键。为所有文本框添加 Enter
和 Leave
事件:
private void textBox_Enter(object sender, EventArgs e)
{
KeyPreview = false;
}
private void textBox_Leave(object sender, EventArgs e)
{
KeyPreview = true;
}