0

現在の状況でキーダウンイベントを停止するにはどうすればよいですか?

private void button1_Click(object sender, EventArgs e)
{
    textBox1.Focus();
    textBox1.KeyDown += new KeyEventHandler(MyKeyPress);
}

public void MyKeyPress(object sender, KeyEventArgs e)
{
    e.SuppressKeyPress = true;
    string first = e.Modifiers.ToString();

    if (first != "None")
    {
        if ((e.KeyCode != Keys.ShiftKey) && (e.KeyCode != Keys.Alt) && (e.KeyCode != Keys.ControlKey))
        {
            textBox1.Text = e.Modifiers.ToString() + " & " + e.KeyCode.ToString();
        }
    }
    else
    {
        textBox1.Text = e.KeyCode.ToString();
    }
    e.Handled = true;
}

ここに画像の説明を入力してください

ご覧のとおり、ユーザーがボタンをクリックするとイベントがトリガーされますが、最初の出力後にイベントを停止するにはどうすればよいですか?

e.Handled = true;

まったく役に立たない

4

3 に答える 3

3

私が正しく理解し、ボタンをクリックした後に一度だけKeyPressイベントを処理したい場合は、このハンドラーの登録を解除する必要がありますMyKeyPress。このような:

public void MyKeyPress(object sender, KeyEventArgs e)
{
  textBox1.KeyDown -= new KeyEventHandler(MyKeyPress);
  ...
}
于 2012-08-21T12:08:05.883 に答える
1

KeyDownの代わりにPreviewKeyDownイベントを使用するだけです。;)

于 2012-08-21T12:14:43.033 に答える
1

「最初の出力」に関する説明とアプリケーションの性質に基づいて、イベントハンドラーのフックを解除する必要があります。そうしないと、Captureボタンをクリックするたびに別のデリゲートが割り当てられます。

public void MyKeyPress(object sender, KeyEventArgs e) 
{ 
    e.SuppressKeyPress = true; 
    string first = e.Modifiers.ToString(); 

    if (first != "None") 
    { 
        if ((e.KeyCode != Keys.ShiftKey) && (e.KeyCode != Keys.Alt) && (e.KeyCode != Keys.ControlKey)) 
        { 
            textBox1.Text = e.Modifiers.ToString() + " & " + e.KeyCode.ToString();
            textBox1.KeyDown -= MyKeyPress; 
        } 
    } 
    else 
    { 
        textBox1.Text = e.KeyCode.ToString();
        textBox1.KeyDown -= MyKeyPress;
    } 
    e.Handled = true; 
} 
于 2012-08-21T12:19:38.740 に答える