繁体   English   中英

图片框不支持键盘事件吗?

[英]Does a picturebox not support keyboard events?

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

Form1属性截图:

在此处输入图像描述

PictureBox1属性截图:

在此处输入图像描述

正如这里其他人所说,在这种情况下捕获键盘事件最合适的方法是在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...

    }
}


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

e.Handled = true;

这不是故障。 它就是这样。 您不输入 PictureBox。 如果您需要通过键执行某些任务,请仅通过表单进行路由

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

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

 ... _myPictureBox.MouseEnter += new EventHandler(myPictureBox_MouseEnter); _myPictureBox.MouseLeave += new EventHandler(myPictureBox_MouseLeave); _myPictureBox.KeyDown += new KeyEventHandler(myPictureBox_event_KeyDown); ... private void myPictureBox_MouseEnter(object sender, EventArgs e) { Focus(); } private void myPictureBox_MouseLeave(object sender, EventArgs e) { FindForm().ActiveControl = null; } private void myPictureBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) MessageBox.Show("Bye"); }

PictureBox 用于显示图像,因此不需要键盘输入。 它不占用焦点,也不与键盘交互。

可以将 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://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.picturebox

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM