2010-07-28 2 views
5

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

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

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

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

+0

Application.exit() не будет работать, потому что это все еще вызывает событие закрытия формы. Я думаю, как некоторые люди упомянули, мне нужно будет использовать флаг, чтобы сигнализировать, откуда идет запрос (меню лотка и кнопка x) –

ответ

3

попробовать это:

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

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

0

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