Как сделать форму запуска изначально невидимой или скрытой

Как сделать форму запуска изначально невидимой или скрытой

У меня есть проект GUI с 2 формами, и формы должны отображаться отдельно. т.е. когда отображается форма 1, все остальные формы должны быть скрыты.

Я могу скрыть все другие формы, но не могу скрыть форму запуска. Так что значок моего приложения в системном трее.

Например, брандмауэр / антивирус и приложения для обмена мгновенными сообщениями делают это для того, чтобы работать в фоновом режиме и быть доступными для пользователя из системного трея.

3 ответа

Решение

Я предполагаю, что вы спрашиваете, как сделать так, чтобы форма не появлялась на панели задач, а появлялась только в системном трее, как IM или антивирус?

Если это так, просто установите ShowInTaskbar собственность Form в false,

Что касается того, чтобы сделать начальную форму невидимой, вам придется использовать ApplicationContext в Application.Run вместо основной формы.

Установите для свойства ShowInTaskbar значение false и установите для WindowState свернутое значение

Microsoft написала веб-страницу об этом. Это дает пример использования ApplicationContext, По сути, вместо того, чтобы иметь приложение форм, у вас есть приложение, которое работает Main() а также Main затем открывает формы.

http://msdn.microsoft.com/en-us/library/Aa984417

Однако при этом вы теряете функциональность, потому что вам нужно отключить "платформу приложения". Это сделает вашу Windows безобразной.

Вот другое решение, почти взломать, но не так уж плохо. Когда Windows запускает приложение формы и устанавливает Visible правда, что вызывает вызов SetVisibleCore, Вы можете переопределить эту функцию. В первый раз SetVisibleCore называется, установите его в ложь. С тех пор, просто пройти.

Имейте в виду, что 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
Другие вопросы по тегам