我在vb.net中有一个以子功能开头的应用程序,它会做一些事情并决定是否显示自身。当它显示自己时,可以通过调用dialog.ShowDialog()来实现。

dialog.ShowDialog()返回时,应用程序进行一些清理并结束。

我想找到一种方法,在不从ShowDialog()函数返回的情况下临时隐藏对话框(将其发送到系统托盘)。但是,一旦我在表单的代码中执行了me.Hide(),表单就会被有效地隐藏,但是ShowDialog()函数将返回并且该过程将关闭。

我了解这是预期的行为。所以我的问题是如何获得这种效果?那就是启动一个对话框,该对话框可以隐藏,并阻止直到用户真正想要退出该应用程序为止。

最佳答案

您无法完成这项工作,在隐藏表单时,ShowDialog()将始终返回。诀窍是使用常规形式和对Application.Run()的常规调用,但要防止立即显示它。将此代码粘贴到您的表单类中:

Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
    If Not IsHandleCreated Then
        CreateHandle()
        value = false
    End If
    MyBase.SetVisibleCore(value)
End Sub

请注意,Load事件处理程序要等到窗体真正可见后才能运行,因此请确保在Sub New构造函数中进行任何初始化。

关于.net - 如何在不从.ShowDialog返回的情况下隐藏模式对话框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2429030/

10-11 00:56