如何在不从.ShowDialog返回的情况下隐藏模态对话框?

Mat*_*agé 7 .net modal-dialog winforms

我在vb.net中有一个应用程序,它以子函数开始做一些事情并决定它是否显示自己.当它显示自己时,它通过调用来实现dialog.ShowDialog().

dialog.ShowDialog()返回时,应用程序做一些清洁和两端.

我想找到一种暂时隐藏对话框(将其发送到系统托盘)而无需从ShowDialog()函数返回的方法.但是,只要me.Hide()在表单的代码中执行a ,表单就会被有效隐藏,但ShowDialog()函数会返回并关闭进程.

我理解这是预期的行为.所以我的问题是如何才能获得这种效果?这是启动一个可以隐藏的对话框,并阻塞,直到用户真的想要退出应用程序.

Joh*_*ler 6

如果隐藏对话框,则将从ShowDialog()返回.忘了试图改变它,你做不到.

您可以最小化对话框.

form1.WindowState = FormWindowState.Minimized;
Run Code Online (Sandbox Code Playgroud)

或者你可以将它放在屏幕上.

form.Left = -16384;
Run Code Online (Sandbox Code Playgroud)

或者你可以让它变得透明从C#修改任何窗口的不透明度


Han*_*ant 4

你无法做到这一点,当窗体隐藏时 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
Run Code Online (Sandbox Code Playgroud)

请注意,在表单实际可见之前,您的 Load 事件处理程序不会运行,因此请务必在 Sub New 构造函数中进行任何初始化。