-1

我有一个表单,我试图从中捕获键盘事件,但是表单有按钮,所以每当我按下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));
    }
}

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

4

2 回答 2

1

按下该space键会使具有焦点的按钮的行为就像它被单击一样。尝试在显示表单时以及单击按钮后将焦点显式设置在表单上,​​以便在按钮执行操作后将焦点从按钮上移开:form1.Focus().

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

于 2013-01-19T06:35:40.450 回答
-1

最简单的解决方案是在文本框中键入,将文本框添加到表单中,为其命名(对于代码,可以说 - mTextBox)。

按下“开始”按钮后,您可以将焦点指向文本框:

mTextBox.Focus();

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

于 2013-01-19T06:24:21.080 回答