Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
673 views
in Technique[技术] by (71.8m points)

winforms - C# keypress doesn't capture 'delete' key

I have added a keyPress event on a ListView. With a breakpoint on my event, I can see that most of the keys trigger the event. However, a few among which, the one I'm interested in (delete), just won't trigger my event.

Is that weird ? And no, there's no broken keys on my keyboard :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);
            }
        }
    }
question from:https://stackoverflow.com/questions/8188328/c-sharp-keypress-doesnt-capture-delete-key

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The reason for this is that the KeyPress event sends a character to the control based upon the character-key you press. However, as you'd expect, the delete key does not represent a character and is thus a non-character key.

Therefore using the KeyPress event will do nothing as you have noticed. You should use the KeyDown or KeyUp Events, either of which will work absolutely fine. The nuance being whether you want your event to fire upon pressing, or letting go of a key.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...