Как запустить приложение .net Windows Forms без видимых окон? - PullRequest
4 голосов
/ 05 июня 2010

У меня есть приложение .net windows forms, которое нужно открыть прямо на иконке уведомлений (на панели задач) без видимых окон. Я понимаю, что могу сделать это на собственном мероприятии или что-то в этом роде. Но если я сделаю это, у меня вспыхнет окно. Как я могу избежать этой вспышки? Я попытался изменить мой Program.cs файл, чтобы он выглядел так:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

MainForm frm = new MainForm();
frm.Visible = false;
Application.Run(frm);

Однако это тоже не работает, потому что Application.Run() делает форму видимой. Я почти уверен, что есть простой ответ, который мне не хватает. Любая помощь с благодарностью.

Ответы [ 5 ]

4 голосов
/ 05 июня 2010

Существует перегрузка для Application.Run(), которая не принимает параметров и поэтому не сразу отображает форму при запуске приложения. Конечно, вам придется самим определять причины, по которым приложение завершает свою работу, поскольку для него нет начальной или «основной» формы для мониторинга. Так, например, это будет значок вашего уведомления, который, я уверен, вы сможете обработать.

3 голосов
/ 05 июня 2010

Если вам не нужна основная форма во время запуска приложения, здесь есть ссылка на статью, которая описывает, как создать просто NotifyIcon.

1 голос
/ 05 июня 2010

Вы можете попробовать установить WindowState на frm в Minimized вместе с ShowInTaskbar в false. Кроме того, я не эксперт, но я думаю, что вы должны обрабатывать логику видимости в конструкторе MainForm.

0 голосов
/ 05 июня 2010

Возможно, немного хакерский, но вы можете создать форму без полей (FormBorderStyle.None) и установить для TransparencyKey значение BackColor, отключить ShowInTaskbar, а затем передать эту форму Application.Run (). Вуаля. :)

0 голосов
/ 05 июня 2010

Вот фрагмент кода из метода инициализации формы, которая делает именно это. Приложение запускается в трее, и в окне отображается, когда пользователь дважды щелкает значок уведомления. У меня есть методы, которые обрабатывают изменение размера и т. Д., Которые гарантируют, что форма будет закрыта только через пункт меню.

public MainForm()
{
  ...code
  Resize += MainForm_Resize;
  notifyIcon.DoubleClick += NotifyIconDoubleClick;
  WindowState = FormWindowState.Minimized;
  Hide();
}
private void MainForm_Resize(object sender, EventArgs e)
{
  if (FormWindowState.Minimized == WindowState)
     Hide();
}

private void NotifyIconDoubleClick(object sender, EventArgs e)
{
   Show();
   try
   {
      WindowState = FormWindowState.Normal;
      ...more code for other stuff
    }catch(yadda yadda)
      ...code
    }
 }
...