C # рядом с трей (как MSN Messenger) - PullRequest
5 голосов
/ 28 июля 2010

У меня есть приложение на c # .net. Поэтому я создал notifyIcon, который находится в трее. То, что я хочу сделать, это когда пользователь нажимает кнопку «х» в форме, я хочу, чтобы она закрылась в трее. Они должны иметь возможность выйти из программы только с помощью контекстного меню на значке в трее.

Итак, в случае закрытия формы я проверял, видна ли форма. Если он виден, я установил для него значение invisible и выставил для showInTaskbar значение false (имитируя сворачивание в лоток). Если форма уже невидима, то они, вероятно, закрывают ее из лотка, поэтому в этом случае я выйду из программы.

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

Как мне решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 28 июля 2010

попробуйте это:

bool _closingFromMenu;

void NOTIFYICON_EXIT_MENU_HANDLER(object sender, EventArgs e)
{
    _closingFromMenu = true;
    Close();
}

//form closing handler
FormClosing +=(a,b) =>{
    if(_closingFromMenu){
        Close();
    }
    else{
        e.Cancel = true;
        //do minimize stuff;
    }
}

или если у вас есть только одна форма, вы можете вызвать Application.Exit(); в обработчике пункта контекстного меню

0 голосов
/ 28 июля 2010

Просто сделайте, чтобы ваше контекстное меню закрыло вызов события Application.Exit ()

0 голосов
/ 28 июля 2010

Возможно, вы хотите отслеживать состояние приложения на основе действий пользователя, поскольку это не обязательно отражается в состоянии окна. Поэтому, когда пользователь выбирает «Выход» из меню, вам нужно установить флажок, чтобы указать, что вы действительно выходите, а не просто скрывать окно.

...