这可能在VBA中看起来很奇怪,但我很好奇,所以请听我说。 我创建了一个程序,可以在单击时在屏幕上移动图像。这虽然好,但仍然 - 它的工作原理。
以下是代码:
'Start primitive animation
Private Sub imgBean_Click()
'Limit for movement to right
Dim coordinates, limit As Integer
coordinates = 0
limit = Form.Width
Do While coordinates < limit
coordinates = coordinates + 5
'Move the image
Me.imgBean.Move coordinates
'Needed to add this to see the image move - updates the form
Form.Repaint
Loop
Debug.Print "Coordinates " & coordinates
Debug.Print limit
'Reset the limit
limit = 0
End Sub
正如代码工作之前所说 - 但是当图像移动时,屏幕被冻结,即我无法关闭表单或与其他组件交互。 (这类似于在Android环境中阻止UI线程 - 你永远不会做的事情!)
有没有办法避免这种情况?
由于
P.S。将焦点设置为表单会使图像偶尔出现并消失。
答案 0 :(得分:0)
事实证明,一旦动画开始,我无法找到一种在视觉上阻止与GUI交互的方法。我直观地说,因为在动画运行时可以单击按钮并输入输入。
它涉及使用DoEvents
命令,它充当MS Access中的多任务处理方式。我在我的Do-While循环上面添加了命令(见下文):
'Essentially allow multitasking
DoEvents
Do While coordinates < limit
coordinates = coordinates + 5
'Move the image
Me.imgBean.Move coordinates
Form.Repaint
Loop
应该注意的是,当我把它放在Do-While循环中时,它不起作用。因此,当我通过单击图像启动动画时,我仍然可以按下其他按钮,因为我输入了一个值的字段,然后单击一个按钮将其转换为另一个按钮 - 动画正在运行。
唯一的问题是如何在视觉上做到这一点。