-1

キーボードイベントをキャッチしようとしているフォームがありますが、フォームにはボタンがあるため、Spaceキーを押すたびにボタンの 1 つが押し下げていると認識します。

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():

ただし、シャニが述べたように、ユーザーがテキストボックス内に入力する方が簡単な場合があります。テキストボックスにフォーカスがある場合、フォームのイベントをキャプチャするのと非常によく似た方法で、ほとんどのキーストローク ( を含みますspaceが、tabキーはフォーカスを別のコントロールに移します) をテキストボックスのイベントのハンドラーでキャッチできます。KeyPressKeyPress

于 2013-01-19T06:35:40.450 に答える
-1

最も簡単な解決策は、テキストボックス内に入力し、フォームにテキストボックスを追加して、名前を付けることです(コードの場合、たとえば--mTextBox)。

「開始」ボタンを押した後、フォーカスをテキストボックスに参照できます。

mTextBox.Focus();

ソリューション(Form.KeyPressに登録)も機能するはずです。KeyDownに登録してみてください。

于 2013-01-19T06:24:21.080 に答える