我正在尝试制作一个网络摄像头程序,我想通过按空格键来启动我的网络摄像头,所以我尝试了以下代码:
private void mainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
webcam.Start(0);
}使用System.Windows.Input将显示以下错误:
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时,它显示:
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。
发布于 2013-11-22 03:08:11
尝试覆盖OnPreviewKeyDown,如下所示:
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
base.OnPreviewKeyDown(e);
if (e.Key == Key.Space)
{
MessageBox.Show("Space key down");
}
}发布于 2013-11-22 03:16:11
您可以覆盖ProcessCmdKey,如下所示:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Space)
{
webcam.Start(0);
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}发布于 2021-12-05 13:48:57
您想要实现的目标是可行的,问题是,尽管您的方法是为PreviewKeyDownEventArgs编写的(它的名称是mainWindow_PreviewKeyDown),但它实际上是使用KeyPressEventArgs.的这可能就是您感到困惑的原因。
查看KeyPressEventArgs,我们发现它没有KeyCode对象。然而,它确实有一个我们可以使用的KeyChar。
通过重写条件值,您可以使用当前事件在按下所需按钮时激活网络摄像头。
private void mainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
if ((int)e.KeyChar == (int)Keys.Space)
webcam.Start(0);
}我建议您将您的方法重命名为它之后真正做的事情,以避免进一步的误解。
https://stackoverflow.com/questions/20129727
复制相似问题