【问题标题】:No "hourglass" appears没有“沙漏”出现
【发布时间】:2022-07-20 04:32:25
【问题描述】:

访问 2016-2019。我有一个带有 MyTextbox 的表单和带有一个 GotFocus 事件的 MyCombobox。 当光标在 MyTextbox 上并单击 MyCombobox 时,我希望在 while 循环(2 秒)期间出现沙漏,但光标仍作为指针。为什么?有没有其他方法可以完成同样的事情?

Private Sub MyCombobox_GotFocus()
  DoCmd.Hourglass True ' or Screen.MousePointer = 11
  DoEvents
  DoCmd.Hourglass True ' or Screen.MousePointer = 11
  Debug.Print "A"
  Dim i As Long
  For i = 1 To 2000000000: Next i ' Do some heavy stuff for about 2 seconds
  Debug.Print "B"
  DoCmd.Hourglass False
End Sub

【问题讨论】:

  • DoEvents 将允许其他代码设置光标。
  • 即使我在DoEvents 之后重复DoCmd.Hourglass True 也没有沙漏(或删除DoEvents
  • 不要为了等待 2 秒而烧掉你的 CPU 循环 20 亿次 - 你可以添加一个原生的 Sleep() 方法到你的 VBA 项目中。另外,在按钮Click() 事件中尝试上面的代码,看看它是否有效。
  • 不要这样做。永远不要让用户无所事事。
  • 用户没有等待“无”。用户正在等待沙漏出现。运行该应用程序的唯一用户是我自己。我为什么不让自己等两秒钟等待沙漏呢?

标签: vba ms-access-2016


【解决方案1】:

我遇到了同样的问题。将光标设置为沙漏似乎要等到所有代码完成运行后再实际更改光标图像。如果代码在处理后将光标设置回正常状态,则将永远不会看到沙漏。这与 无关。

但是,我偶然发现了一个解决方案。我不知道为什么,但打开一个弹出报告会导致光标变为沙漏中间处理 - 给出预期的行为。弹出报告可以立即再次关闭。

创建一个空白报告。将其更改为“弹出”类型[报告→属性→其他→弹出→是]。将报告另存为“popupReport”(或类似的)。弹出报告无法隐藏。然后将代码更改为:

Private Sub MyCombobox_GotFocus()
    
    DoCmd.OpenReport "popupReport", acViewReport
    DoCmd.Close acReport, "popupReport"
    
    DoCmd.Hourglass True ' or Screen.MousePointer = 11
    DoEvents
    DoCmd.Hourglass True ' or Screen.MousePointer = 11
    Debug.Print "A"
    Dim i As Long
    For i = 1 To 2000000000: Next i ' Do some heavy stuff for about 2 seconds
    Debug.Print "B"
    DoCmd.Hourglass False
End Sub

让我知道这是否适合您/不适合您。或者,如果有人知道任何更简单的方法来让光标更改为沙漏中处理,我很想知道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多