C#keypress不捕获’删除’键

我在ListView上添加了一个keyPress事件。 通过我的事件断点,我可以看到大多数键触发事件。 然而,其中一些,我感兴趣的(删除),只是不会触发我的事件。

这有点奇怪吗? 不,我的键盘上没有坏掉的按键:D

  private void listView1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Delete) { ListView target = (ListView)sender; if (target.SelectedIndices != null && target.SelectedIndices.Count > 0) { string ric = target.SelectedItems[0].SubItems[0].Text; //target.Items.RemoveAt(target.SelectedIndices[0]); ListModels.getInstance().getModel("Vols").removeRic(ric); } } } 

原因是KeyPress事件根据您按下的字符键向控件发送一个字符。 但是,正如您所期望的那样,删除键不代表字符,因此是非字符键。

因此,使用Keypress事件将不会发生任何事情,因为您已经注意到了。 您应该使用KeyDown或KeyUp事件,其中任何一个都可以正常工作。 细微之处在于您是否希望在按下或放开钥匙时触发事件。

您将需要使用KeyDown事件。

请改用keyDown ; keyPress就像一个完整的keyDown + keyUp

问题是,如果您将EditMode属性设置为EditOnEnter,它将不会触发。 如果您使用EditOnKeyStrokeOfF2,它将触发该事件

在KeyDown中使用如下条件,

 if (e.KeyCode == Keys.Delete) { // Your Logic.... }