首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >e.KeyCode和KeyEventArgs不工作

e.KeyCode和KeyEventArgs不工作
EN

Stack Overflow用户
提问于 2013-11-22 03:04:27
回答 3查看 4.7K关注 0票数 1

我正在尝试制作一个网络摄像头程序,我想通过按空格键来启动我的网络摄像头,所以我尝试了以下代码:

代码语言:javascript
复制
private void mainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Space)

                webcam.Start(0);
        }

使用System.Windows.Input将显示以下错误:

代码语言:javascript
复制
Error   2   'System.Windows.Input.KeyEventArgs' does not contain a definition for 'KeyCode' and no extension method 'KeyCode' accepting a first argument of type 'System.Windows.Input.KeyEventArgs' could be found (are you missing a using directive or an assembly reference?)   C:\Users\User\Desktop\WebCam\Window1.xaml.cs    44  19  WebCam

当我使用System.Windows.Forms时,它显示:

代码语言:javascript
复制
Error   1   No overload for 'mainWindow_PreviewKeyDown' matches delegate 'System.Windows.Input.KeyEventHandler' C:\Users\User\Desktop\WebCam\Window1.xaml   4   47  WebCam

我怎么才能克服这个问题呢?另外,我使用的是Visual Studios 2012 Express。

EN

回答 3

Stack Overflow用户

发布于 2013-11-22 03:08:11

尝试覆盖OnPreviewKeyDown,如下所示:

代码语言:javascript
复制
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
    base.OnPreviewKeyDown(e);

    if (e.Key == Key.Space)
    {
        MessageBox.Show("Space key down");
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-22 03:16:11

您可以覆盖ProcessCmdKey,如下所示:

代码语言:javascript
复制
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {

               if (keyData == Keys.Space)
               {
                webcam.Start(0);
                    return true;
                }

            return base.ProcessCmdKey(ref msg, keyData);
        }
票数 0
EN

Stack Overflow用户

发布于 2021-12-05 13:48:57

您想要实现的目标是可行的,问题是,尽管您的方法是为PreviewKeyDownEventArgs编写的(它的名称是mainWindow_PreviewKeyDown),但它实际上是使用KeyPressEventArgs.的这可能就是您感到困惑的原因。

查看KeyPressEventArgs,我们发现它没有KeyCode对象。然而,它确实有一个我们可以使用的KeyChar。

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.keypresseventargs?view=windowsdesktop-6.0#properties

通过重写条件值,您可以使用当前事件在按下所需按钮时激活网络摄像头。

代码语言:javascript
复制
private void mainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if ((int)e.KeyChar == (int)Keys.Space)

            webcam.Start(0);
    }

我建议您将您的方法重命名为它之后真正做的事情,以避免进一步的误解。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20129727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档