C# 为什么我的控件不接受 KeyDown 事件中的多个键
C# Why is my control not accepting multiple keys in the KeyDown event
好的,我已经在这个控件上工作了将近一个月,我遇到的一个问题是,如果我按下 CTRL 键,它会自动注册,如果我按下 Space 密钥由它自己注册。我试图将两者分开,并试图在同一个 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()
作为作弊器告诉我何时按下键并且不会显示刻度,除非我注释掉 CTRL 子句。我哪里错了?
您不会在 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){}
试试
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Space)
{
}
好的,我已经在这个控件上工作了将近一个月,我遇到的一个问题是,如果我按下 CTRL 键,它会自动注册,如果我按下 Space 密钥由它自己注册。我试图将两者分开,并试图在同一个 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()
作为作弊器告诉我何时按下键并且不会显示刻度,除非我注释掉 CTRL 子句。我哪里错了?
您不会在 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){}
试试
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Space)
{
}