Как сделать форму запуска изначально невидимой или скрытой - PullRequest
8 голосов
/ 20 июля 2010

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 20 июля 2010

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

Если такпросто установите ShowInTaskbar свойство Form на false.

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

2 голосов
/ 25 ноября 2012

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

1 голос
/ 16 ноября 2010

Microsoft написала веб-страницу об этом.Это дает пример использования 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...