有没有一种方法可以将keydown和keyleft事件处理程序添加到用户表单中的图像对象?我只能看到mouseup / down / move,error,dragover,dropandpaste。
我注意到带有一个选项按钮,事件keydown / keyleft是可用的,但不适用于图像。 预先感谢
答案 0 :(得分:3)
您不能添加该控件类型不存在的事件处理程序(除了通过子类化之外,但图像控件始终不会获得焦点),但是图像控件无法获得焦点,因此仍然无法接收击键。
您谈论KeyDown
和KeyLeft
事件。尽管某些控件具有KeyDown
,KeyPress
和KeyUp
事件,但是没有任何控件具有KeyLeft
事件。您也许是想捕获KeyDown
事件,然后检测是按下的键是Down
箭头还是Left
箭头?
但是,有一些选择:
为UserForm连接KeyDown
或KeyPress
事件(取决于您需要的密钥信息类型),然后对图像控件进行操作。这可能仅在您满意由表单处理按键的情况下使用,而不管可能选择了哪个其他控件。
添加一个代理控件,例如一个确实收到TextBox
和KeyDown
事件的KeyPress
,并将其放置在图像控件的后面。这样,当用户切换到文本框时,可以在图像上添加边框以使其看起来像外观,然后使文本框按键事件作用于图像。如果用户单击图像,则可以设置图像的click事件以使文本框成为焦点,然后再次处理文本框的按键事件,以作为图像控件的代理。
答案 1 :(得分:2)
这取决于您要实现的目标(未指定)。
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