C# picturebox不支持键盘事件吗?

C# picturebox不支持键盘事件吗?,c#,forms,events,properties,picturebox,C#,Forms,Events,Properties,Picturebox,我目前正在使用Visual Studio,我不知道这是否是一个小故障,但当我进入表单属性并显示事件时,有两个事件称为KeyDown和keydup。现在,当我对PictureBox执行相同操作时,它的事件更少,并且没有KeyDown和keydup事件。PictureBox支持的事件是否比其他东西少?这是个小故障吗 Form1properties的屏幕截图: PictureBox1属性的屏幕截图: PictureBox用于显示图像,因此无需键盘输入。它不会聚焦,也不会与键盘交互。这不是故障。就是这

我目前正在使用Visual Studio,我不知道这是否是一个小故障,但当我进入表单属性并显示事件时,有两个事件称为KeyDown和keydup。现在,当我对
PictureBox
执行相同操作时,它的事件更少,并且没有KeyDown和keydup事件。
PictureBox
支持的事件是否比其他东西少?这是个小故障吗

Form1
properties的屏幕截图:

PictureBox1属性的屏幕截图:


PictureBox用于显示图像,因此无需键盘输入。它不会聚焦,也不会与键盘交互。

这不是故障。就是这样。你不需要输入图片框。
如果您需要通过按键执行某些任务,请仅通过表单将其发送

,如其他人所述,在这种情况下捕获键盘事件的最合适方法是在
表单
级别截取按键事件,因为
PictureBox
控件无法接收焦点,并且缺少暴露的按键事件

要完成此操作,请首先在设计器中,或在窗体的构造函数中,将窗体的
KeyPreview
属性设置为
true

this.KeyPreview = true;
然后,订阅
KeyUp
事件:

this.KeyUp += MainForm_KeyUp;
最后,使用类似于以下的事件处理程序截获和处理关键事件:

private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.A:
            // Perform some action...
            break;
        case Keys.B:
            // Perform some action...
            break;
        case Keys.End:
            // Perform some action...
            break;

        // etc...

    }
}

如果要从事件处理程序中“使用”密钥,可以按如下方式设置
KeyEventArgs
对象的
Handled
属性:

e.Handled = true;

您可以使用一个简单的技巧使用PictureBox处理键盘事件

为MouseEnter和MouseLeave事件添加处理程序,以便在光标悬停时将焦点设置为PictureBox。这样做将捕获键盘事件

。。。
_myPictureBox.MouseEnter+=新事件处理程序(myPictureBox\u MouseEnter);
_myPictureBox.MouseLeave+=新事件处理程序(myPictureBox\u MouseLeave);
_myPictureBox.KeyDown+=新的KeyEventHandler(myPictureBox\u事件\u KeyDown);
...
私有void myPictureBox_MouseEnter(对象发送方,事件参数e)
{
焦点();
}
私有void myPictureBox_MouseLeave(对象发送方,事件参数e)
{
FindForm().ActiveControl=null;
}
私有void myPictureBox\u KeyDown(对象发送方,KeyEventArgs e)
{
if(e.KeyCode==Keys.Delete)
MessageBox.Show(“再见”);

}
可以将KeyDown、KeyPress和KeyUp的事件处理程序添加到PictureBox中。例如,在Visual Basic中,对于名为MyPicBox的PictureBox,为MyPicBox.MouseEnter添加一个处理程序,并将行MyPicBox.Select()放在处理程序中。 图片框现在将响应键盘事件。例如,假设图片框显示科学图像的视觉显示。PictureBox.KeyDown处理程序可以截取Shift-Ctrl-H或Shift-Ctrl-V等组合键,以调用某些与光标位置相关的操作,例如显示穿过底层数组的剪切:

 Private Sub MyPicBox_KeyDown(sender As Object, e As KeyEventArgs) Handles MyPicBox.KeyDown
    If e.Control AndAlso e.Shift Then
        Select Case e.KeyCode
            Case Keys.V
                MyCut = Cut.VERTICAL
                Exit Select
            Case Keys.H
                MyCut = Cut.HORIZONTAL
                Exit Select
            Case Keys.N
                MyCut = Cut.NONE
                Exit Select                
        End Select
    End If
End Sub 

键盘事件列在

我没有在picturebox中键入,我想在单击“a”键时触发一些东西,比如说“method1()”。是的,这就是为什么要在表单中传递它。您检查按下的键并调用必要的方法,但如果选择了picturebox,它是否仍然有效?例如,如果我的光标位于picturebox或按钮上方,则不会触发mousemove事件。请告诉我确切的要求。这将有助于我正确分析情况,我将能够更好地帮助你。顺便说一句,picturebox不能有焦点。即使任何其他控件具有焦点,Mousemove事件也将始终激发。实际上,PictureBox可以获得焦点:
Console.WriteLine(“PictureBox可以聚焦:+pictureBox1.CanFocus”)但它不会从标签中接收它,也不会在其他东西可以获取它时保留它。但是你可以在代码中设置它。。然而,Anup关于通过表单和
KeyPreview
事件路由键盘事件的说法是正确的。您可以在窗口本身上截取键盘消息。当然,它需要键盘。使用键盘而不是鼠标滚动图像是很合理的。它们都列出了,但带有备注“此事件与此类无关”。。它们不起作用。