我有一个应用程序,它是项目解决方案的一部分。在这个项目中,我希望它启动表单是不可见的,但在此表单可见的托盘中仍然有一个通知图标。
我知道添加me.hide
到 中form_load
是行不通的。我尝试添加一个实例化启动表单的模块,并将其设置为启动对象。虽然那也没用。我已经没有想法让这种形式不可见了。有人可以帮忙吗?我正在使用 VB.NET。
我有一个应用程序,它是项目解决方案的一部分。在这个项目中,我希望它启动表单是不可见的,但在此表单可见的托盘中仍然有一个通知图标。
我知道添加me.hide
到 中form_load
是行不通的。我尝试添加一个实例化启动表单的模块,并将其设置为启动对象。虽然那也没用。我已经没有想法让这种形式不可见了。有人可以帮忙吗?我正在使用 VB.NET。
将此粘贴到您的表单代码中:
Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
If Not Me.IsHandleCreated Then
Me.CreateHandle()
value = False
End If
MyBase.SetVisibleCore(value)
End Sub
工作方式是显示表单的第一个请求,由 Application 类完成,此代码将 Visible 属性覆盖回 False。此后表单将正常运行,您可以调用 Show() 使其可见,并调用 Close() 将其关闭,即使它从不可见。请注意,Load 事件在您显示它之前不会触发,因此请确保将事件处理程序中的任何代码(如果有)移动到构造函数或此覆盖。
把它放在表单的 Shown 事件中
Me.Visible = False
最简单的方法是将表单的不透明度设置为 0%。当您希望它出现时,将其设置回 100%
这是我发现的另一种方法。
设置表单属性
ShowInTaskbar = False
然后在表单的构造函数中添加
WindowState = FormWindowState.Minimized
这很容易实现并且没有闪烁。在我的情况下,我还使用 NotifyIcon 从通知托盘访问程序并设置
WindowState = FormWindowState.Normal
Show()
BringToFront()
在 Notify_MouseClick 事件处理程序中。
要在显示表单后再次隐藏表单,再次最小化并不能很好地完成这项工作。在我的情况下,我使用 Form_Closing 事件并隐藏表单。
Hide()
用于Me.Opacity = 0
在加载事件时隐藏表单。
然后在 form.Shown 事件中使用下面的代码
Me.Hide()
Me.Opacity = 100
只是为了抛弃一种完全不同的方法,你有没有考虑过不使用 a 的重载Application.Run()
(并自动显示)Form
?如果您使用传入一个ApplicationContext
(或更确切地说,您自己的子类ApplicationContext
)的那个,那么您可以选择您的行为是什么。有关更多详细信息,请参见此处:
尝试这个:
Sub New()
MyBase.SetVisibleCore(False)
End Sub