首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access 2021中未调用的终止方法

Access 2021中未调用的终止方法
EN

Stack Overflow用户
提问于 2022-02-07 06:41:45
回答 1查看 61关注 0票数 0

还有人发现他们在Access中的终止()方法没有被调用吗?

下面是我的cBusyPointer类的代码,为了简洁起见,删除了注释:

代码语言:javascript
复制
Option Compare Database     ' Use database order for string comparisons
Option Explicit             ' Declare EVERYTHING!
Option Base 1               ' Arrays start at 1

Public Sub show()
    DoCmd.hourGlass True
End Sub

Private Sub Class_Terminate()
    DoCmd.hourGlass False
End Sub

典型用法是:

代码语言:javascript
复制
Sub doTehThings()
    Dim hourGlass As New cBusyPointer
    hourGlass.show()
    ' Do all teh things
End Sub

在以前的版本中,每当对象超出作用域并被销毁时,该类将恢复沙漏。

我甚至试图手动销毁沙漏对象:

代码语言:javascript
复制
Sub doTehThings()
    Dim hourGlass As cBusyPointer
    Set hourGlass = New cBusyPointer
    hourGlass.show()
    ' Do all teh things
    Set hourGlass = Nothing
End Sub

解决这一问题的唯一方法是添加隐藏()方法并调用该方法。

还有其他人遇到过这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-07 14:39:06

我不能重复这个问题。Terminate()方法在到达Set hourGlass = Nothing时被调用。

以下几点:

代码语言:javascript
复制
Dim hourGlass As New cBusyPointer

这将在每次调用hourGlass变量时创建一个新实例,甚至将其设置为空。有关更多信息,请参见下面链接中的答案:

What's the difference between Dim As New vs Dim / Set

在处理对象时,应该始终使用Dim/Set

代码语言:javascript
复制
hourGlass.show()

这甚至不在VBA中编译。子类即使在需要参数时也不接受括号,除非它们前面有Call关键字。

最后,引用对象的最干净的方法是使用With语句访问对象,确保对象在到达End With语句时终止。

代码语言:javascript
复制
 With New cBusyPointer
     .show
 End With
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71014455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档