C# 为什么我的控件不接受 KeyDown 事件中的多个键

标签 c# user-controls

好的伙计们,我已经在这个控件上工作了将近一个月,我遇到的一个问题是,如果我按 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 或“空格”键,它就可以正常工作了。所以我试着把它们分开,想出了

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 子句。我哪里出错了?

最佳答案

尝试类似的东西

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Space)
{

}

关于C# 为什么我的控件不接受 KeyDown 事件中的多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762055/

相关文章:

c# - ASP.NET Identity Web Api 2 与 MVC 5 登录 Cookie

c# - 在运行时将所有事件处理程序从一个控件复制到另一个控件

asp.net - 从动态添加的 ASP.NET 用户控件捕获事件

c# - 在 C# 中处理 TCP 服务器中的用户超时

c# - 按 X 分钟分组时间,以 X 分钟间隔拆分

c# - 如何使用 Fluent NHibernate 映射自引用文件夹层次结构?

c# - 在C#winform中加载用户控件时,将焦点放在文本框中

C# 列出控件中的所有方法

c# - WPF MVVM : Call method from control from inside attached usercontrol

ASP.NET 用户控件和 jQuery 对话框