【问题标题】:Check whether a form is loaded (even if Minimized)检查表单是否已加载(即使已最小化)
【发布时间】:2017-11-10 00:22:29
【问题描述】:

我已将表单声明为

Private _fUpdate As frmUpdate

有各种各样的解决方案可以检查表单是否打开和可见。

但是,如果表单已最小化且未显示在任务栏中,则它不会显示在 Application.OpenForms 中。

同样Form.IsHandleCreated 返回false 与上述窗口状态。

If Not uForm Is Nothing 会返回 True,即使该表单还没有被实例化,所以它也不可用。

是否有另一种方法来检查表单是否已加载,然后是存储窗口存在和隐藏/显示状态的变量?

【问题讨论】:

  • Application.OpenForms 有时不可靠。似乎只是检查对象 var IsNot Nothing 是否可以正常工作。
  • 空值检查不是解决这个问题的好主意。当您关闭表单时,该变量不会为空,而是表单的Disposed 属性将为真。
  • 关于不在任务栏中显示的最小化表单,如果不是设置ShowInTaskBar属性来隐藏表单,您可以信任Visible属性。
  • 如果我使用 Visible,它不会出现在 OpenForms 中。 :-(
  • @LarsTech stackoverflow.com/a/3751748/1070452 我认为它发生在其他情况下,而不是列出的情况....我让它剥落一两次并开始原则上不使用它

标签: vb.net forms winforms


【解决方案1】:

如果我需要从应用程序中的其他位置获取表单的实例,我通常会在名为 Instance 或类似名称的表单中创建 Shared 属性并将其设置在表单的 Load 中事件。

使用此实例属性,您可以从应用程序中的任何其他位置调用它,并使用表单的WindowState 属性来检查其状态。


表格示例:

Public Class frmUpdate
    Public Shared Property Instance As frmUpdate

    Private Sub OnLoad(sender As Object, e As EventArgs) Handles MyBase.Load
        Instance = Me
    End Sub
End Class


其他方法中的示例用法:

Private Sub DoSomething()
    If (frmUpdate.Instance.WindowState = FormWindowState.Minimized)
        'Do something
    End If
End Sub

【讨论】:

  • 谢谢,但我希望有一些内置的东西,而不是一些自定义的解决方案。
猜你喜欢
  • 2018-08-22
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2021-06-11
  • 2015-05-23
相关资源
最近更新 更多