如何使启动表单最初不可见或隐藏
我有一个带有2个表单的GUI项目,表单必须单独显示。即,当显示表单1时,必须隐藏所有其他表单。
我可以隐藏所有其他表单,但我无法隐藏启动表单。所以我的应用程序在系统托盘中的图标。
例如,防火墙/防病毒和即时消息应用程序执行此操作,以便在后台运行,并且用户仍可从系统托盘访问。
答案 0 :(得分:5)
我猜你所问的是如何让表单不出现在任务栏中,只出现在系统托盘中,就像IM或反病毒一样?
如果是这样,只需将ShowInTaskbar
的{{1}}属性设置为Form
即可。
至于使初始表单不可见,您必须在false
内使用ApplicationContext
而不是主表单。
答案 1 :(得分:2)
将ShowInTaskbar属性设置为false并将WindowState设置为最小化
答案 2 :(得分:1)
微软写了一篇关于此的网页。它给出了使用ApplicationContext
的示例。基本上没有表单应用程序,您有一个运行Main()
和Main
然后打开表单的应用程序。
http://msdn.microsoft.com/en-us/library/Aa984417
但是,你失去了这种功能,因为你必须禁用“应用程序框架”。它会让你的Windows变得丑陋。这是一个不同的解决方案,几乎是一个黑客但不是太糟糕。当Windows启动您的表单应用并将Visible
设置为true时,会调用SetVisibleCore
。您可以覆盖该功能。在第一次调用SetVisibleCore
时,将其设置为false。从那时起,只需通过。
请注意,如果表单未显示,您的应用启动时Form.Load
将不会触发,因此请将所有代码移至Sub New()
。
以下是整个事情:
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
config.LoadFromRegistry() 'this gets config.StartMinimized from the registry
' Code that needs to run at start, even if the form isn't showing,
' should be here. Form.Load will only happen when the Form is actually
' visible for the first time.
End Sub
Dim FirstSetVisible As Boolean = True
Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
If config.StartMinimized And FirstSetVisible Then
MyBase.SetVisibleCore(False) 'ignore Windows attempt to set Visible
FirstSetVisible = False 'never do this again
Else
MyBase.SetVisibleCore(value)
End If
End Sub