Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Трей 
V
    Опции темы
mel
Дата 27.8.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 30.7.2006

Репутация: нет
Всего: нет



Как спрятать приложение в трей ?
PM MAIL   Вверх
mr.DUDA
Дата 27.8.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Добавляем на форму компонент NotifyIcon, обязательно выбираем какую-нибудь иконку, вешаем обработчики на Form1.SizeChanged и на notifyIcon1.DoubleClick:
Код
using System;
using System.Windows.Forms;

namespace WindowsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.notifyIcon1.Visible = false;
        }

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Visible = false;
                this.notifyIcon1.Visible = true;
            }
        }

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

    }
}


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


--------------------
user posted image
PM MAIL WWW   Вверх
mel
Дата 27.8.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 30.7.2006

Репутация: нет
Всего: нет



Спосибо!
И еще такой вопрос почемуты визде ставишь оператор this, если работает и без него ?

Это сообщение отредактировал(а) mel - 27.8.2006, 21:13
PM MAIL   Вверх
marcusmae
Дата 27.8.2006, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 3
Всего: 39



Цитата

почемуты визде ставишь оператор this, если работает и без него ?


по-моему, в большинстве ситуаций легче поставить Qualifier (this, base, имя сборки, класса), чем потом искать ошибки, вызванные его отсутствием.

Это сообщение отредактировал(а) marcusmae - 27.8.2006, 23:45


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
mr.DUDA
Дата 28.8.2006, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Цитата(mel @  27.8.2006,  20:34 Найти цитируемый пост)
И еще такой вопрос почемуты визде ставишь оператор this, если работает и без него ?

Это дело привычки, код становится более читаемым, и к тому же с IntelliSense проще работать - после this показывает только методы и свойства класса, а не всё что доступно.

Цитата(marcusmae @  27.8.2006,  23:25 Найти цитируемый пост)
по-моему, в большинстве ситуаций легче поставить Qualifier (this, base, имя сборки, класса), чем потом искать ошибки, вызванные его отсутствием.

и поэтому тоже...


--------------------
user posted image
PM MAIL WWW   Вверх
Mal Hack
Дата 5.1.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



Сорри что поднимаю тему, но не хочу новую создавать.
Чем visible = (true|false) лучше Hide() или Show() ?
PM ICQ   Вверх
mr.DUDA
Дата 5.1.2007, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



По идее одно и то же. В реальности, нет гарантии что одно и то же smile.


--------------------
user posted image
PM MAIL WWW   Вверх
reloni
Дата 5.1.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.5.2006
Где: Москва

Репутация: 1
Всего: 4



Судя по тому, что написано в MSDN - это одно и то же.
PM MAIL ICQ   Вверх
Mal Hack
Дата 5.1.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



Вот ради интереса попробовал...
При Hide все нормально, а при Show, который на клике NotifyIcon:
Цитата
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
   at LWS.LWSForm.notifyIcon1_Click(Object sender, EventArgs e) in E:\Programming\LWS\Form1.cs:line 111
   at System.Windows.Forms.NotifyIcon.OnClick(EventArgs e)
   at System.Windows.Forms.NotifyIcon.WmMouseUp(Message& m, MouseButtons button)
   at System.Windows.Forms.NotifyIcon.WndProc(Message& msg)
   at System.Windows.Forms.NotifyIcon.NotifyIconNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam


Код
        private void notifyIcon1_Click(object sender, EventArgs e)
        {
            //this.Visible = !this.Visible;
            LWSForm.ActiveForm.Show();
            //WindowState = FormWindowState.Normal;
        }


При Visible все работает на ура.
PM ICQ   Вверх
mr.DUDA
Дата 6.1.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



если
Цитата(Mal Hack @  5.1.2007,  22:46 Найти цитируемый пост)
LWSForm.ActiveForm.Show();

заменить на
Код
this.Show();

то и Show будет работать на ура


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 6.1.2007, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



Взяв в руки reflector выяснил:
Код

public void Show()
{
      this.Visible = true;
}
public void Hide()
{
      this.Visible = false;
}



P.S. Это методы класса Control, предка класса Form
PM MAIL WWW ICQ   Вверх
kobra
Дата 6.1.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



такои вот вопрос
когда пишу
Код

        public Form1()
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Minimized;
        }

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Visible = false;
            }
        }
то при старте программа в таскбаре всеравно остается, а после вывода и минимизации уже проподает.
тотже ефект имеет 
Код

        private void Form1_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }
 
а вот когда пишу 
Код

        private void Form1_Shown(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }
то таскбар очищается сразу, но при этом форма сначало появляется на экране а потом сварачивается. а это не красиво, тем более если форма загружается долго.
как нужно делать чтобы избавится от этих неудобств?
PM MAIL   Вверх
reloni
Дата 6.1.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.5.2006
Где: Москва

Репутация: 1
Всего: 4



kobra, прятать форму в конструкторе:
Код

        public Form1()
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Minimized;
            this.Visible = false;
        }

Т.к. при запуске программы событие Form1_SizeChanged не происходит и поэтому форма остается видна. Или как вариант после минимизации в конструкторе самостоятельно вызывать событие SizeChanged, но это изврат на мой взглядsmile

ps Оказывается событие происходит, но форма почему-то все равно видна в трее. Видимо нужно сворачивать по событию Shown. А мигает она видимо всегда педед тем, как скрыться smile 

Это сообщение отредактировал(а) reloni - 7.1.2007, 01:14
PM MAIL ICQ   Вверх
mr.DUDA
Дата 7.1.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Перекрыть у формы SetVisibleCore и не вызывать базовый метод - тогда форма не сможет стать видимой. Чтобы сделать видимой, ставим какой-нить флаг, который проверяем в SetVisibleCore и по которому базовый метод вызывается, затем делаем Visible = true, всё.


--------------------
user posted image
PM MAIL WWW   Вверх
kobra
Дата 7.1.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



mr.DUDA я попробовал, но без резултатно. а может чтото и не совсем так делаю.
может подкинеш рабочи вариант?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.