Vb.net 如何创建一个无形的启动表单?

Vb.net 如何创建一个无形的启动表单?,vb.net,winforms,visual-studio-2010,Vb.net,Winforms,Visual Studio 2010,我有一个应用程序,它是项目解决方案的一部分。在这个项目中,我希望它启动的形式是不可见的,但仍然有一个通知图标在托盘中可见的形式 我知道将me.hide添加到form\u load中不起作用。我尝试添加一个实例化启动表单的模块,并将其设置为启动对象。虽然那也不管用。我已经没有办法让这个表单隐形了。有人能帮忙吗?我使用的是VB.NET。将其放入表单的显示事件中 Me.Visible = False Me.Hide() Me.Opacity = 100 将其粘贴到表单代码中: Protected

我有一个应用程序,它是项目解决方案的一部分。在这个项目中,我希望它启动的形式是不可见的,但仍然有一个通知图标在托盘中可见的形式


我知道将
me.hide
添加到
form\u load
中不起作用。我尝试添加一个实例化启动表单的模块,并将其设置为启动对象。虽然那也不管用。我已经没有办法让这个表单隐形了。有人能帮忙吗?我使用的是VB.NET。

将其放入表单的显示事件中

Me.Visible = False
Me.Hide()
Me.Opacity = 100

将其粘贴到表单代码中:

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

其工作方式是,在应用程序类完成的第一个显示表单的请求中,该代码将Visible属性重写回False。在此之后,表单将正常运行,您可以调用Show()使其可见,并调用Close()将其关闭,即使它从未可见。请注意,Load事件在显示之前不会触发,因此请确保将事件处理程序中的任何代码(如果有)移动到构造函数或此重写中。

为了抛出一种完全不同的方法,您是否考虑过不使用
应用程序.Run()的重载(
)进行(并自动显示)一张
表格
?如果您使用在
ApplicationContext
中传递的一个(或者更典型地说,您自己的
ApplicationContext
子类),那么您可以选择您的行为。有关更多详细信息,请参见此处:


最简单的方法是将窗体的不透明度设置为0%。如果希望它显示,请将其设置回100%

使用
Me.Opacity=0
隐藏加载时的表单事件

然后在form.Showed事件中使用以下代码

Me.Visible = False
Me.Hide()
Me.Opacity = 100

这是我找到的另一种方法

将表单属性设置为

ShowInTaskbar = False
然后在窗体的构造函数中添加

WindowState = FormWindowState.Minimized
这是非常容易实现,并没有闪烁的作品。在我的例子中,我还使用NotifyIcon从通知托盘访问程序,然后设置

WindowState = FormWindowState.Normal
Show()
BringToFront()
在Notify_鼠标单击事件处理程序中

要在显示表单后再次隐藏表单,仅再次最小化并不能完全完成任务。在我的例子中,我使用Form_Closing事件并隐藏表单

Hide()
试试这个:

Sub New()
    MyBase.SetVisibleCore(False)
End Sub

如果是我,我根本不会在启动时创建表单。您的自定义ApplicationContext可以创建和侦听来自托盘通知组件的事件。那么你只需要在需要的时候创建一个表单。谢谢,它很有效。不过我有一个问题。我在我的项目上设置了一个启动屏幕,因为主窗体不像通常那样“加载”,所以它不会关闭启动屏幕。我想解决的办法是将splashscreen.close()添加到主窗体overide中。虽然我得到了一个非法的跨线程错误。可以将此中的非法CrossThreadCalls检查设置为false吗?还是有更好的办法?啊。当主窗体的加载事件触发时,启动屏幕关闭。正如我所记录的,在调用Show()之前不会发生这种情况。你不能两全其美。只有在程序启动延迟时才使用启动屏幕。这是一个完美的问答。我也有同样的问题,这完全符合我的要求。现在,表单甚至在几毫秒内都没有显示。谢谢。另外,通过调用
sub main()
,在启动时管理vb.net应用程序表单和上下文也有一个很好的答案。这是一个很好的解决方案。对我来说最有效。所有不透明度、隐藏、最小化选项都会在操作前短暂闪烁。这确保了根本没有可见性。您只需要注意mybase.load下的内容,可能是sub-it+从上面的覆盖调用。另一个选项是覆盖中的me.show()。这完全符合我的目的,因为我在启动时启动了许多其他东西,这些东西与公认的解决方案不兼容。这解决了我的问题。调用
Me.Visible=false
in
showded
事件将导致显示看起来异常。谢谢