【问题标题】:How to clear the stack of forms properly in VB6如何在VB6中正确清除表单堆栈
【发布时间】:2012-02-20 12:36:28
【问题描述】:

我在 VB6 中有一个应用程序,我正在为其实现自动注销功能。只要应用程序处于空闲状态一段时间,用户将通过关闭用户已加载的所有表单来注销。 我正在使用 FormStack 并卸载所有已加载的表单。为了以正确的方式关闭表单,我们使用 SendKeys ESC 并且表单将使用 ESC 键卸载。

在大多数情况下它工作正常,但问题是如果有类似键盘的东西,然后用 ESC 键卸载键盘,但是一旦卸载所有表单,键盘旁边的代码就会得到执行,其中引用了表单控件和加载表单。

我可以做参考检查,但是这个功能在很多地方都有实现,到处检查都需要时间。

我也想过要等待500毫秒左右的时间来关闭每个表单,但觉得依靠定时器不好。

谁能提出一个更好的办法来顺利卸载所有表单。

【问题讨论】:

  • 你为什么不只是unload theformfor each theform in forms 中?
  • 嗨,Alex,非常感谢您的回复。
  • 嗨,Alex,非常感谢您的回复。最初我确实卸载了表单本身。但是当时我在很多地方引用表单元素时遇到了同样的问题。为了摆脱这个,我想顺利地关闭表格。

标签: vb6


【解决方案1】:

我曾经做过 将 i 调暗为整数

for i = forms.count -1 to 0 step -1
 unload forms(i)
next

你也可以创建一个接口,实现形式

IDispose

 sub Close()



dim miclazz as IDispose

form each miclazz in forms
  miclazz.Close()
next

【讨论】:

  • 为什么在这种情况下使用 Close() 方法创建一个新接口会有所帮助? Close() 方法仍然必须是这样的:Unload Me。
  • 只是为了订单,如果您使用一种模式,您的代码中的 MVP 如何拥有一段动态代码
  • @MarkBertenshaw 您可以检查接口并在存在时调用它,如果不存在则调用 unload。这将允许您卸载大多数表单并自定义导致问题的表单
猜你喜欢
  • 2016-08-21
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
相关资源
最近更新 更多