如何使启动表单最初不可见或隐藏

时间:2010-07-20 09:45:43

标签: c# .net windows winforms

如何使启动表单最初不可见或隐藏

我有一个带有2个表单的GUI项目,表单必须单独显示。即,当显示表单1时,必须隐藏所有其他表单。

我可以隐藏所有其他表单,但我无法隐藏启动表单。所以我的应用程序在系统托盘中的图标。

例如,防火墙/防病毒和即时消息应用程序执行此操作,以便在后台运行,并且用户仍可从系统托盘访问。

3 个答案:

答案 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