【发布时间】:2010-07-20 09:45:43
【问题描述】:
如何使启动窗体最初不可见或隐藏
我有一个带有 2 个表单的 GUI 项目,这些表单必须单独显示。即显示表格1时,必须隐藏所有其他表格。
我可以隐藏所有其他表单,但我无法隐藏启动表单。因此我的应用程序图标在系统托盘中。
例如,防火墙/防病毒和即时消息应用程序这样做是为了在后台运行,并且用户仍然可以从系统托盘访问。
【问题讨论】:
如何使启动窗体最初不可见或隐藏
我有一个带有 2 个表单的 GUI 项目,这些表单必须单独显示。即显示表格1时,必须隐藏所有其他表格。
我可以隐藏所有其他表单,但我无法隐藏启动表单。因此我的应用程序图标在系统托盘中。
例如,防火墙/防病毒和即时消息应用程序这样做是为了在后台运行,并且用户仍然可以从系统托盘访问。
【问题讨论】:
我猜你问的是如何让表单不出现在任务栏中,只出现在系统托盘中,就像IM或杀毒一样?
如果是这样,只需将Form 的ShowInTaskbar 属性设置为false。
至于使初始表单不可见,您必须在Application.Run 中使用ApplicationContext 而不是主表单。
【讨论】:
ApplicationContext。
微软为此写了一个网页。它给出了使用ApplicationContext 的示例。基本上,您拥有一个运行 Main() 和 Main 然后打开表单的应用程序,而不是表单应用程序。
http://msdn.microsoft.com/en-us/library/Aa984417
但是,这样会失去功能,因为您必须禁用“应用程序框架”。它会让你的 Windows 变得丑陋。
这是一个不同的解决方案,几乎是一个 hack,但还不错。当 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
【讨论】:
将 ShowInTaskbar 属性设置为 false 并将 WindowState 设置为最小化
【讨论】: