Как сделать форму запуска изначально невидимой или скрытой
Как сделать форму запуска изначально невидимой или скрытой
У меня есть проект 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