好的家伙所以我一直在研究这个控件近一个月,我遇到的一个问题是,如果我按下CTRL键,它会自动注册,如果按空格键,它是自我注册的。我试图将两者分开,我试图在同一if
语句中使用它们。两者都不成功。
我的第一次尝试是这样的
protected override void OnKeyDown(KeyEventArgs e)
{
// base.OnKeyDown(e);
if (_isEditing)
{
if (e.KeyData == Keys.Delete)
{
if (_selectedObj != null)
{
DeleteSelectedObject();
}
}
}
if (e.Control && e.KeyData == Keys.Space)
{
_isEditing = !_isEditing;
Invalidate();
}
}
现在,如果我从等式中删除Ctrl或'Space'键,它可以正常工作。所以我试着将它们分开并提出
protected override void OnKeyDown(KeyEventArgs e)
{
// base.OnKeyDown(e);
if (_isEditing)
{
if (e.KeyData == Keys.Delete)
{
if (_selectedObj != null)
{
DeleteSelectedObject();
}
}
}
if (e.Control)
{
Console.WriteLine(DateTime.Now.ToShortTimeString());
if (e.KeyData.Equals(Keys.Space))
{
_isEditing = !_isEditing;
Console.WriteLine(DateTime.Now.Ticks.ToString());
}
Invalidate();
}
}
使用Console.WriteLine()
作为骗子告诉我何时按下按键并且Ticks不会显示,除非我注释掉CTRL子句。我在哪里错了?
答案 0 :(得分:2)
尝试类似
的内容if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Space)
{
}
答案 1 :(得分:0)
您在KeyDown事件中无法获得修饰符。而是尝试以下方法之一来了解是否按下了修改器(Ctrl,Shift,Alt):
Keyboard.IsKeyDown
if ((Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
&& e.KeyData == Keys.Space){}
检查Keyboard.Modifiers
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
&& e.KeyData == Keys.Space){}