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 出现两次!

如果按下逗号,我想执行一些代码,如果在 DataGridView (dgvC) 上按下 DelKey,我想执行另一个代码。

MessageBox 仅用于测试。

4

3 回答 3

2

您误解了 e.SupporessKeyPress 的目的。在您的 dataGridView_KeyDown 事件中,您使用;

e.SuppressKeyPress = true;

仅防止在您的方法退出后将事件传递给DataGridView 。

在您的代码中,您还将此事件处理程序分配给Form_KeyDown事件,因此为 2 个不同的控件捕获该事件,并且 SuppressKeyPress 不会阻止它们都接收此事件。

您需要从代码中删除这一行,它将处理程序(我相信是错误的)分配给 Form_KeyDown 事件;

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

看起来您已经订阅了两次 KeyDown 事件。

删除 .Designer.cs 文件中的行,e.SuppressKeyPress 仍然可以工作。

于 2012-06-04T08:55:54.130 回答
1

尝试在 ifs 中插入。

e.Handler = true;

这样事件就不会重复了。

于 2012-06-04T08:58:01.753 回答