彩盒不支持键盘事件吗?

时间:2016-01-13 06:05:56

标签: c# forms events properties picturebox

我目前正在使用视觉工作室,我不知道这是否是一个小故障,但当我进入表单属性并显示事件时,有两个事件称为 KeyDown KeyUp 。现在,当我为一个图片框做同样的事情时,它有更少的事件,没有 KeyDown KeyUp 事件。相框是否比其他东西支持更少的事件?这是一个小故障吗?

Form1属性的屏幕截图:

enter image description here

PictureBox1属性的屏幕截图:

enter image description here

5 个答案:

答案 0 :(得分:4)

正如其他人已经指出的那样,在这种情况下捕获键盘事件的最合适的方法是截取Form级别的关键事件,因为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...

    }
}


如果您打算在事件处理程序中“使用”该键,则可以按如下方式设置Handled对象的KeyEventArgs属性:

e.Handled = true;

答案 1 :(得分:1)

这不是故障。它的方式。你不能输入PictureBox。 如果您需要通过键执行某项任务,请仅通过表单进行路由

答案 2 :(得分:0)

PictureBox用于显示图像,因此无需键盘输入。它没有关注焦点,也没有与键盘交互。

答案 3 :(得分:0)

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

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

vectors

答案 4 :(得分:-1)

可以将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 

键盘事件列在https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.picturebox