向对象添加事件处理程序

Adding event handlers to object

有没有办法将 keydown 和 keyleft 事件处理程序添加到用户表单中的图像对象?我只能看到 mouseup/down/move,error,dragover,dropandpaste.

我注意到有一个选项按钮,事件 keydown/keyleft 可用但不适用于图像。 提前致谢

您不能添加该控件类型不存在的事件处理程序(除了通过子类化,但无论如何图像控件都不会获得焦点),但图像控件无法获得焦点,因此无论如何都无法接收击键。

你说的是 KeyDownKeyLeft 事件。虽然某些控件具有 KeyDownKeyPressKeyUp 事件,但没有任何控件具有 KeyLeft 事件。您的意思是捕获 KeyDown 事件,然后检测按下的键是 Down 箭头还是 Left 箭头?

但是,有几个选项:

  1. 为用户窗体设置 KeyDownKeyPress 事件(取决于您需要哪种类型的关键信息),然后对图像控件进行操作。这可能仅在您愿意由表单处理按键时才有用,而不管可能选择了哪个其他控件。

  2. 添加一个代理控件,比如说一个确实接收KeyDownKeyPress事件的TextBox,并将它放在后面[=40] =] 图像控件。这样,当用户切换到文本框时,您可以为图像添加边框,使其 看起来 就像被选中一样,然后让文本框键事件作用于图像。如果用户单击图像,而不是在控件之间切换,您可以设置图像的单击事件为文本框提供焦点,并再次处理文本框的键事件作为图像控件的代理。

这取决于你想达到什么你没有指定。

Image显然没有Key-events所以不能直接使用。 一种可能的解决方案是使用 Frame 控件,它具有 Picture 属性 和 KeyDown 事件,因此您可以在框架获得焦点时捕获按键。示例:

Private Sub FrameWithPicture_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    ' Compare KeyCode with predefined vbKey-Constansts, e.g. for key-left:
    If KeyCode = vbKeyLeft Then
        ' left arrow key was pressed, do somthing
    Else
        ' all other keys were pressed, do something else 
    End If
End Sub

或者您可以将 Image 控件添加到此框架,当在框架上发生按下事件时,然后对该图像执行一些操作,例如:FrameWithImage.Controls.Item(0).BackColor = vbRed 等。HTH