Как скрыть окно в запуске в настольном приложении c #? - PullRequest
0 голосов
/ 29 декабря 2010

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

Ответы [ 6 ]

8 голосов
/ 29 декабря 2010

Свойство Visible имеет большое значение в Winforms, установка его в true - это то, что вызывает создание собственного окна Windows.Одним из побочных эффектов является то, что установка его в false в методе OnLoad или событии Load не работает.В Hide () нет ничего особенного, он просто устанавливает Visible в false и поэтому не работает.

Переопределение SetVisibleCore () - это способ сделать это.Однако важно, чтобы вы все еще позволяли создавать собственное окно.Вы не можете закрыть () форму иначе.Сделайте так, чтобы это выглядело так:

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

Теперь вы можете вызвать Show () или установить Visible = true, чтобы сделать окно видимым в любое время.И вызовите Close (), даже если вы никогда не делали это видимым.Это хороший способ реализовать NotifyIcon с помощью всплывающего окна, которое отображается только через контекстное меню.

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

3 голосов
/ 03 февраля 2011

Вы можете попробовать это также ..

    public partial class Form1 : Form
{
public delegate void myHidingDelegate();

    public Form1()
    {
        InitializeComponent();
        myHidingDelegate dlg = new myHidingDelegate(mymethodcall);
        dlg.BeginInvoke(null, null);
    }

 public void mymethodcall()
    {
        myHidingDelegate dlg1 = new myHidingDelegate(HideForm);
        this.Invoke(dlg1);
    }

     public void HideForm()
    { this.Hide(); }
}

Единственная проблема с этим: форма мигает на мгновение и исчезает

2 голосов
/ 29 декабря 2010

Для приложений WinForms я обнаружил, что самый простой способ контролировать видимость запуска - переопределить метод SetVisbileCore .

Вот простой пример, форма которого будет показана5 секунд

using System;
using System.Windows.Forms;

namespace DelayedShow
{
  public partial class Form1 : Form
  {
    private bool _canShow = false;
    private Timer _timer;

    public Form1()
    {
      InitializeComponent();
      _timer = new Timer();
      _timer.Interval = 5000;
      _timer.Tick += new EventHandler(timer_Tick);
      _timer.Enabled = true;
    }

    void timer_Tick(object sender, EventArgs e)
    {
      _canShow = true;
      Visible = true;
    }

    protected override void SetVisibleCore(bool value)
    {
      if (_canShow)
      {
        base.SetVisibleCore(value);
      }
      else
      {
        base.SetVisibleCore(false);
      }
    }
  }
}
1 голос
/ 29 декабря 2010

Вы пробовали this.Hide() вместо Visible = false?

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

Application.Run();

Подождите некоторое время (используя Timer) и откройте форму.

0 голосов
/ 29 декабря 2010

Размещение приложения C # в системном трее

  1. Для начала откройте существующую форму C # для Windows (или создайте новую).
  2. Откройте панель инструментов Visual Studio.
  3. Перетащите элемент управления NotifyIcon на форму. Элемент управления будет называться notifyIcon1 по умолчанию и помещен под форму, потому что он не имеет визуального представления на самой форме.
  4. Установите для свойства Text элемента управления NotifyIcon имя, которое будет отображаться, когда пользователь останавливает мышь над значком приложения. Например, это значение может быть «KillerApp 1.0».
  5. Установите для свойства элемента управления значок, который вы хотите видеть в системном трее.

Совет: если у вас есть файл BMP, который вы хочу преобразовать в файл значка, я настоятельно рекомендую растровое изображение QTam для Приложение Icon 3.5.

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

private void Form1_Resize(object sender, System.EventArgs e)
  {
     if (FormWindowState.Minimized == WindowState)
        Hide();
  }

- Добавьте обработчик события для события NotifyIcon.DoubleClick и закодируйте его следующим образом, чтобы приложение было восстановлено при двойном щелчке значка.

private void notifyIcon1_DoubleClick(object sender,
                                       System.EventArgs e)
  {
      Show();
      WindowState = FormWindowState.Normal;
  }
0 голосов
/ 29 декабря 2010

В вашем методе Main используется Application.Run() вместо Application.Run(new Form1()).Затем через некоторое время используйте new Form1() и form1.Show().

...