Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Как свернуть в трей при старте


Автор: GX777 29.6.2008, 16:20
Народ,помогите!Вроде простая задача но понять не могу.Как свернуть программу при ее запуске в трей?NotifyIcon уже добавил.this.Visible = false; в обработчике формы на  load  не помогает. А через  WindowsState можно свернуть только в панель задач.Вот...this.Hide тоже почему то не катит. И еще кнопки MaximizeBox and MinimizeBox тоже нет

Автор: Magnifico 29.6.2008, 19:15
this.WindowState = FormWindowState.Minimized;
this.Hide();

Автор: GX777 29.6.2008, 19:35
я же сказал не катит.мне не свернуть в панель задач надо а свернуть в трей

Автор: Dennnis 29.6.2008, 20:13
А как это "свернуть в трей" smile 

Автор: GX777 29.6.2008, 20:18
))это там где возле часов внизу. Мне надо сделать так чтоб при старте проги было видно только иконку возле часов(как значок громкости для примера) и больше ничего.я не знаю как еще обьяснить 

Автор: Bishop 29.6.2008, 23:07
GX777, 
Скрыть форму "при ее запуске":
Код

private void FormMain_Shown(object sender, EventArgs e)
{
    this.Hide();
}

Но зачем скрывать, если можно не показывать:
Код

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        //Application.Run(new FormMain());
        NotifyIcon ni = new NotifyIcon();
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
        ni.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
        ni.Text = "notifyIcon1";
        ni.Visible = true;
        ni.MouseClick += new MouseEventHandler(ni_MouseClick);
        Application.Run();
    }

    static void ni_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
            Application.Exit();
        else
        {
            FormMain f = (sender as NotifyIcon).Tag as FormMain;
            if (f == null || f.IsDisposed)
            {
                (sender as NotifyIcon).Tag = f = new FormMain();
                f.Show();
                f.Activate();
            }
        }
    }
}

Это набросок. Чисто для иллюстрации.

Автор: GX777 29.6.2008, 23:21
Спасибо,Bishop , хоть ты меня понял. А какой способ лучше для производительности и для ресурсов?

Добавлено через 4 минуты и 11 секунд
Со вторым способом только я че то не совсем понял.Но это не твоя вина,наверное у меня знаний не хватает.

Автор: jonie 30.6.2008, 00:12
что вы хотите по производительности, если ваша программа фактически ничего не делает?... затраты на создание окна, конечно есть, но оно нужно для обработки сообщений...т.е. его все-равно создавать, вопрос только когда.

Автор: GX777 30.6.2008, 01:41
jonie,здесь тыоднозначно прав.Просто я имел в виду "глядя в будущее",если прийдется делать более серьезные программы .Я думаю так:если начать думать об оптимизации уже сейчас,то легче будет потом,при более сложных проектах. 

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