我有这个非常简单的代码块:
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();
}
然后,当我单步执行代码并点击Delete
或Backspace
时,这是e.KeyCode的值:
我知道我的代码不会检查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.我觉得有些锡箔帽阴谋理论家认为这可能会有所改变,但我们完全感到困惑。
答案 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
}