如何使多行文本框不接受Enter和Backspace

时间:2011-04-12 13:34:53

标签: c# .net winforms textbox multiline

我有一个多行文本框,不应该接受字母,数字,换行符(输入键)和退格键。简而言之,textbox.Text不应该是可编辑的。但我确实希望文本框接受两个快捷键 - 控制和控制+ R.我可以使文本框不可编辑的一种方法是将其设置为只读。但是文本框根本不会接受任何击键。简而言之,我的快捷方式(控制和控制+ R)不能使用只读方法(Control + R)。

任何人都可以在这方面提供帮助。这就是我所要做的一切。

我能做的一件事就是不要让文本框只读,然后限制可以在文本框中输入的字符(字母和数字)。使用此代码:

    private void txtResult_KeyPress(object sender, KeyPressEventArgs e)
    {
        // only modifier keys, escape, enter, backspace etc is accepted now
        e.Handled = !char.IsControl(e.KeyChar);
    }

    private void txtResult_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control == true)
        {
            if (e.KeyCode == Keys.R)
            {
                // do something
            }
            else
            {
                //do something
            }
        }

        if (e.KeyCode == Keys.Escape)
        {
            //do something
        }
    }

通过这种技术,我可以获得快捷方式(控制和控制+ R)。但是这种方法的问题在于Enter和Backspace键也可以编辑文本框的文本。如何专门限制从文本框注册的Enter和Backspace键,但让Control和Escape ??

3 个答案:

答案 0 :(得分:2)

你试过SuppressKeyPress = true吗?

private void textBox2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control == true)
            {
                if (e.KeyCode == Keys.R)
                {
                    // do something
                }
                else
                {
                    //do something
                }
            }
            else
                e.SuppressKeyPress = true;


        }

答案 1 :(得分:1)

由于您正在处理KeyDown事件处理程序中的键,为什么不让KeyPress处理程序返回所有键击处理?

所以只要设置e.Handled = true,无论如何。我相信退格和输入也会被解释为控制字符。

答案 2 :(得分:0)

如果文本框设置为ReadOnly, Enter Backspace 键将不起作用,正如您在问题的早期所建议的那样。确保该属性仍设置为true。您可以在“属性”窗口中设置它,也可以通过以下代码设置它:

myTextBox.ReadOnly = true;

然后,您需要处理文本框控件的KeyDown事件,并观察您感兴趣的特定键。具体如下:

private void myTextBox_KeyDown(object sender, KeyEventArgs e)
{
   if (e.Control)
   {
      if (e.KeyCode == Keys.R)
      {
         MessageBox.Show("Pressed Ctrl+R");
      }
      else
      {
         MessageBox.Show("Pressed Ctrl");
      }
   }
   else if (e.KeyCode == Keys.Escape)
   {
      MessageBox.Show("Pressed Esc");
   }
}

只要文本框设置为只读,这就完全按预期工作。没有其他键被识别,用户无法更改或修改文本框中的任何文本。您不需要抑制按键,因为当您将按键设置为只读时控件已经这样做了。您也不需要处理KeyDownKeyPress事件。无论如何KeyPress都不适合你,因为它不会让你处理控制字符。

相关问题