0

このコードの何が問題なのですか:

InitializeComponent();
this.KeyDown += new KeyEventHandler(dgvC_KeyDown);

private void dgvC_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyValue == 188)
    {
        System.Media.SystemSounds.Beep.Play();
        e.SuppressKeyPress = true;
    }
    if (e.KeyValue == (int)Keys.Delete)
    {
        MessageBox.Show("323");
    }
}

MessageBox が 2 回表示されます。

コンマが押された場合はいくつかのコードを実行し、DataGridView (dgvC) で DelKey が押された場合は別のコードを実行したいと考えています。

MessageBox はテスト用です。

4

3 に答える 3

2

あなたはe.SupporessKeyPressの目的を誤解しています。dataGridView_KeyDownイベントで、;を使用します。

e.SuppressKeyPress = true;

メソッドの終了後にイベントがDataGridViewに渡されるのを防ぐだけです。

コードでは、このイベントハンドラーをForm_KeyDownイベントにも割り当てるため、イベントは2つの異なるコントロールに対してキャプチャされ、SuppressKeyPressは両方がこのイベントを受信するのを停止しません。

ハンドラー(私はerronesoulyだと思います)をForm_KeyDownイベントに割り当てているコードからこの行を削除する必要があります。

this.KeyDown += new KeyEventHandler(dgvC_KeyDown);
于 2012-06-04T09:01:44.777 に答える
1

ifsの中に挿入してみてください。

e.Handler = true;

このようにして、イベントが繰り返されることはありません。

于 2012-06-04T08:58:01.753 に答える
1

KeyDown イベントを 2 回サブスクライブしたようです。

.Designer.cs ファイルの行を削除しても、e.SuppressKeyPress は引き続き機能します。

于 2012-06-04T08:55:54.130 に答える