如何使用DataGridView Keydown事件并检查按下了哪个键?

时间:2014-02-04 17:09:38

标签: c# winforms datagridview

我有这个非常简单的代码块:

    private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
            AddRow();

        if (e.KeyCode == Keys.Back && dataGridView1.SelectedRows.Count > 0)
            RemoveRow();
    }

然后,当我单步执行代码并点击DeleteBackspace时,这是e.KeyCode的值:

enter image description here

我知道我的代码不会检查Delete但我可以在之后添加它。

如果我将KeyCode转换为字符串,它会给我“删除”的值,但我不应该这样做......

编辑;我应该注意,我的第一个代码块,对于Ctrl-V来说非常好。所以我不明白为什么e.KeyCode不评估Keys.Delete或Keys.Backspace?

编辑2; 我的同事发现了一些可能100%巧合,或非常有趣的东西。

KeyCode.Delete = 46。 KeyCode.Space = 32 KeyCode.Back = 8 KeyCode.MButton = 4; KeyCode.RButton = 2;

32 + 8 + 4 + 2 = 46.我觉得有些锡箔帽阴谋理论家认为这可能会有所改变,但我们完全感到困惑。

2 个答案:

答案 0 :(得分:1)

来自MSDN"This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values"

您看到的是枚举值的字符串表示形式。它使用Flags属性在Enum.ToString()方法中构造字符串。有关更多说明,请参阅this SO问题。

答案 1 :(得分:0)

Back是枚举值,表示按下了退格键(MSDN-Keys Enumeration)。示例代码:

if (e.KeyCode.HasFlag(Keys.Back)) {
   //do stuff here
}