2010-07-28 6 views
5

나는 C# .net 앱을 가지고 있습니다. 그래서 트레이에 앉아있는 notifyIcon을 만들었습니다. 내가 원하는 것은 사용자가 폼의 "x"버튼을 눌렀을 때 트레이에 가깝게하려고 할 때입니다. 트레이 아이콘의 컨텍스트 메뉴를 사용하여 프로그램을 종료 할 수 있어야합니다.C# 트레이 (msn 메신저와 유사)

그래서 내가 한 것은 양식 닫기 이벤트에서 양식이 표시되는지 확인합니다. 보이는 경우, 나는 그것을 보이지 않는 것으로 설정하고 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

사용자의 동작을 기반으로 응용 프로그램의 상태를 추적하고자 할 수 있습니다. 사용자의 동작이 반드시 창 상태에 반드시 반영되는 것은 아닙니다. 따라서 사용자가 메뉴에서 종료를 선택하면 창을 숨기지 않고 실제로 나가는 것을 나타내는 플래그를 설정해야합니다.

0

그냥 만들어 귀하의 상황에 맞는 메뉴 close 이벤트 호출 Application.Exit()

관련 문제