打字导师项目

时间:2013-01-19 05:58:13

标签: c# winforms

我有一个表单,我正试图捕捉键盘事件,但表单有按钮,所以每当我按下 Space 键时,其中一个按钮认为我按下了它。

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{  
   if (btnclock.Text == "Start")
       e.Handled = false;
   else
   {
       i = Convert.ToInt16(rtb1.Text.IndexOf(e.KeyChar));

       if (i == 0)
       {
           rtb1.Text = rtb1.Text.Remove(0, 1);
       }
       else
            j++;

       textBox1.Text = Convert.ToString((j));
    }
}

如何避免这种情况并继续捕捉表单上的击键?

2 个答案:

答案 0 :(得分:1)

按下space键会使焦点按钮像点击一样动作。尝试在显示表单时以及单击按钮后在表单上明确设置焦点,以便在执行其操作后将焦点移离按钮:form1.Focus()

然而,正如Shani所提到的,在文本框中输入用户可能更容易。当文本框具有焦点时,大多数击键(包括space,但tab键将焦点转移到另一个控件)可以通过文本框的KeyPress事件的处理程序捕获,在某种程度上与您捕获表单KeyPress事件的方式非常相似。

答案 1 :(得分:-1)

最简单的解决方案是在文本框内输入,在表单中添加一个文本框,将其命名(对于代码,让我们说 - mTextBox)。

按下“开始”按钮后,您可以将焦点引用到文本框:

mTextBox.Focus();

您的解决方案(注册到Form.KeyPress)也应该工作,尝试注册到KeyDown。