Как скрыть основную форму и все еще запустить программу? - PullRequest
3 голосов
/ 07 января 2012

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

Edit:

  lMainForm := new MainForm; 
  lMainForm.ShowInTaskbar := true;
  Application.Run(lMainForm);

Не сработало. Как только Application.Run выполняется, mainform отображается вместе со значком на панели задач.

Ответы [ 3 ]

3 голосов
/ 07 января 2012

Вы делаете это путем переопределения метода SetVisibleCore ().Например:

    protected override void SetVisibleCore(bool value) {
        if (!this.IsHandleCreated) {
            CreateHandle();
            value = false;
        }
        base.SetVisibleCore(value);
    }

Остерегайтесь, чтобы событие Load не сработало.Обязательно переместите любой код, который у вас есть, либо в конструктор (предпочтительно), либо в это переопределение.

Этот код подавляет окно только один раз.Позже вы можете вызвать Show () или установить Visible = true, чтобы окно отображалось как обычно.Обычно это делается в обработчике события Click элемента контекстного меню для NotifyIcon.

2 голосов
/ 07 января 2012

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

Вместо этого вы должны вызвать одну из других Application.Run перегрузок.

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

Когда вы будете готовы показать свою основную форму, в ответ на действие над значком уведомления позвоните lMainForm.Show. Вы также захотите сделать так, чтобы нажатие кнопки закрытия в форме просто скрывало форму, а не закрывало ее. Я предполагаю, что вы хотите, чтобы ваш основной экземпляр формы сохранялся скрытым в фоновом режиме.

Итак, верхний уровень вашей программы будет выглядеть так:

//create and show the notify icon here
lMainForm := new MainForm; 
lMainForm.ShowInTaskbar := true;
lMainForm.Visible := false;//I believe this is the default in any case
Application.Run;

Вам потребуется добавить в меню значков уведомлений элемент, закрывающий приложение. Реализуйте это с помощью:

Application.Exit;

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

Поскольку у меня нет Prism, я проверил это с помощью C # / WinForms, и я надеюсь, что он хорошо переносится в Prism!

1 голос
/ 07 января 2012

Вы пробовали:

lMainForm.WindowState := System.Windows.Forms.FormWindowState.Minimized;

или

lMainForm.Hide(); // call on application start
...