C#在TextBox焦点时阻止热键

时间:2015-01-16 09:19:00

标签: c# forms textbox key

我有一个包含多个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();               
        }

     }

2 个答案:

答案 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)

您可以在文本框是活动控件时禁用热键。为所有文本框添加EnterLeave个事件:

    private void textBox_Enter(object sender, EventArgs e)
    {
        KeyPreview = false;
    }

    private void textBox_Leave(object sender, EventArgs e)
    {
        KeyPreview = true;
    }