避免阻止用户与表单交互 - 访问VBA 2007

时间:2013-05-16 13:54:53

标签: vba ms-access-2007

这可能在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。将焦点设置为表单会使图像偶尔出现并消失。

1 个答案:

答案 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循环中时,它不起作用。因此,当我通过单击图像启动动画时,我仍然可以按下其他按钮,因为我输入了一个值的字段,然后单击一个按钮将其转换为另一个按钮 - 动画正在运行。

唯一的问题是如何在视觉上做到这一点。