请问,此代码有什么问题:
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仅用于测试。
答案 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;
这样就不会重复这个事件了。