是否可以绕过RichTextBox输入

时间:2017-08-20 08:19:17

标签: c#

我有一个RichTextBox(rtb_inputField)。每当我在此RTB中键入任何内容,然后按Enter键,我将输入的字符串发送到服务器。然后我将相同的字符串放回rtb_inputField并以编程方式选择它(这样用户可以快速发送相同的数据,只需再次按Enter键 - 或者通过开始键入它来发送另一个字符串。)到目前为止一切顺利。< / p>

现在我想要做的是:如果NumLock被锁定并按下任何一个小键盘键(0-9)我想完全绕过rtb_inputField。绕过我的意思是:不要在RTB中键入任何数字,而是直接在其他地方处理这些数字。 (我打算以这种方式快速向服务器发送数据,而用户在RTB中写的最后一个命令保持不变。)

但是如果NumLock没有锁定,我希望小键盘将数字放入RTB。

这可能吗?如何?

这是我目前的代码:(我已对其进行了修改,以便您只看到与此问题相关的内容。)

private List<Keys> numPadList = new List<Keys>();

    private void populateNumPadList() {
        numPadList.Add(Keys.NumPad0);
        numPadList.Add(Keys.NumPad1);
        numPadList.Add(Keys.NumPad2);
        numPadList.Add(Keys.NumPad3);
        numPadList.Add(Keys.NumPad4);
        numPadList.Add(Keys.NumPad5);
        numPadList.Add(Keys.NumPad6);
        numPadList.Add(Keys.NumPad7);
        numPadList.Add(Keys.NumPad8);
        numPadList.Add(Keys.NumPad9);
    }


    private void rtb_inputField_KeyDown(object sender, KeyEventArgs e) {
        if ((numPadList.Contains(e.KeyData)) && (IsKeyLocked(Keys.NumLock))) {
            //The user pressed a numpad key
            MessageBox.Show("You pressed: " + e.KeyData.ToString());
            e.Handled = true;

        }

    }

    private void rtb_inputField_KeyUp(object sender, KeyEventArgs e) {
        RichTextBox inputField = (RichTextBox)sender;
        string userInput = inputField.Text.Trim();

        if ((e.KeyData == Keys.Enter) && (sender == rtb_inputField)) {

                if (client.Connected) {
                    macroString = runInputThroughMacroDictionary(userInput);

                    //do stuff..

                    writer.WriteLine(macroString);
                }

        }

        //lots of other stuff..
    }

我在这个代码中运行的代码:它只在NumLock被锁定时触发,而MessageBox告诉我我按下了哪个numKey。 - 但它没有像我想要的那样绕过RichTextBox。

1 个答案:

答案 0 :(得分:1)

在KeyPress事件处理程序中,当您认为已完成所有操作并且RichTextBox不会继续使用密钥时,请将e.Handled设置为true

private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (_toBeIgnored)
    {
        e.Handled = true;
        return;
    }
}

private bool _toBeIgnored;

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (IsKeyLocked(Keys.NumLock))
    {
        _toBeIgnored = true;
        return;
    }
}