0

这在 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 线程——这是你永远不会做的事情!)

那么有没有办法避免这种情况呢?

谢谢

PS 将焦点设置在表格上会使图像零星出现和消失。

4

1 回答 1

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

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

于 2013-05-22T15:22:47.560 回答