我有一个多行文本框,不应该接受字母,数字,换行符(输入键)和退格键。简而言之,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 ??
答案 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");
}
}
只要文本框设置为只读,这就完全按预期工作。没有其他键被识别,用户无法更改或修改文本框中的任何文本。您不需要抑制按键,因为当您将按键设置为只读时控件已经这样做了。您也不需要处理KeyDown
和KeyPress
事件。无论如何KeyPress
都不适合你,因为它不会让你处理控制字符。