Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как свернуть приложение в трей сразу при загрузке


Автор: yur4egg 6.11.2010, 19:09
Доброго времени.

Создал чистую форму с нуля, поместил на нее компонент notifyIcon и кнопку, при нажатии на которою работает код:

notifyIcon1.Visible = true;
Hide();

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

public Form1()
        {
            InitializeComponent();
            notifyIcon1.Visible = true;
            Hide(); 
        }

и сюда:

private void Form1_Load(object sender, EventArgs e)
        {
            notifyIcon1.Visible = true;
            Hide();
        }

и внутрь InitializeComponent(); результат везде одинаков: форма видна на экране, ошибок нет, по кнопке только и сворачивается.
Помогите разобраться, пожалуйста.

Автор: Fortnox 6.11.2010, 19:31
После события Load, вызывается событие Shown, которое показывает форму, даже если до этого был вызван метод Hide.
Поэтому скрытие формы нужно добавить в Shown:
Код

        private void FrmMain_Shown(object sender, EventArgs e)
        {
            notifyIcon1.Visible = true;
            this.Hide();
        }


Автор: KelTron 6.11.2010, 19:47
Код

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        PutToTray(true);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        PutToTray(true);
    }

    private void notifyIcon1_Click(object sender, EventArgs e)
    {
        PutToTray(false);
    }

    private void PutToTray(bool isPut)
    {
        this.notifyIcon1.Visible = isPut;
        this.WindowState = (isPut) ? FormWindowState.Minimized : FormWindowState.Normal;
        this.ShowInTaskbar = !isPut;
    }
}



Автор: yur4egg 7.11.2010, 06:12
Оба примера выше не работают, форма по-прежнему видна на экране.

Код

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            notifyIcon1.Visible = true;
            Hide();
        }

       private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            Show();
            WindowState = FormWindowState.Normal;
            notifyIcon1.Visible = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            notifyIcon1.Visible = true;
            Hide();
        }

     }

Автор: KelTron 7.11.2010, 09:46
Цитата(yur4egg @  7.11.2010,  06:12 Найти цитируемый пост)
Оба примера выше не работают, форма по-прежнему видна на экране.

Примеры рабочие, ищи свои ошибки..

Автор: Hohhi 7.11.2010, 10:48
KelTron, две копейки позвольте вставить: Alt+tab-ом форма тоже не видна?

Автор: KelTron 7.11.2010, 11:30
В моём примере видна, чтобы была не видна можно изменить код так:
Код

private void PutToTray(bool isPut)
{
    this.notifyIcon1.Visible = isPut;
    this.Visible = !isPut;
    this.ShowInTaskbar = !isPut;

    if (!isPut)
    {
        Activate();
    }
}


Автор: yur4egg 7.11.2010, 14:46
Цитата(KelTron @ 7.11.2010,  09:46)
Цитата(yur4egg @  7.11.2010,  06:12 Найти цитируемый пост)
Оба примера выше не работают, форма по-прежнему видна на экране.

Примеры рабочие, ищи свои ошибки..

Уважаемый KelTron, расписываю все по шагам:

1. Создаю в Visual Studio новый проект Windows-приложения С#
2. В окно Form1.cs копирую ваш код
3. Нажимаю F5
4. Любуюсь окном "Form1"

Что я делаю не так? Если вы утверждаете, что пример рабочий, добро пожаловать через TeamViewer на мой комп, убедитесь что это не так.

Автор: Fortnox 7.11.2010, 15:12
yur4egg, привяжите события то. В окне свойств формы и notifyicon. Либо в коде.
Например, в конструкторе формы 1:
Код

public Form1()
        {
            InitializeComponent();
            this.Shown += new EventHandler(Form1_Shown);
        }

private void Form1_Shown(object sender, EventArgs e)
        {
            // код
        }

Автор: KelTron 7.11.2010, 15:15
Должна быть такая последовательность:
1. Создаю в Visual Studio новый проект Windows-приложения С#
2. В окно Form1.cs копирую ваш код
3. Присоединяю обработчики событий к соответствующим контролам
4. Нажимаю F5
5. Не вижу  окна "Form1"

Методы Form1_Load, button1_Click, notifyIcon1_Click это обработчики событий, если их не привязать к событиям контролов они конечно не будут работать..

Добавлено через 2 минуты и 27 секунд
Fortnox,  скрывать форму в собитии Shown очень весело, при любой попытке отобразить форму она будет сразу же скрываться..)

Автор: Fortnox 7.11.2010, 15:21
KelTron, и правда.) Досадно, надо было учесть это.

Автор: yur4egg 7.11.2010, 17:57
Спасибо всем, теперь все ясно, дело в привязке. Век живи, век учись.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)