DataGridView KeyDown出现两次

时间:2012-06-04 08:05:00

标签: c# winforms datagridview keydown

请问,此代码有什么问题:

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仅用于测试。

3 个答案:

答案 0 :(得分:2)

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

e.SuppressKeyPress = true;

仅阻止在方法退出后将事件传递给 DataGridView

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

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

this.KeyDown += new KeyEventHandler(dgvC_KeyDown);

答案 1 :(得分:1)

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

删除.Designer.cs文件中的行,e.SuppressKeyPress仍然有效。

答案 2 :(得分:1)

尝试插入ifs。

e.Handler = true;

这样就不会重复这个事件了。