보통 폼의 'x' 표시를 누르게 되면 프로그램이 종료 된다.


그런데 간혹 폼을 종료하지 않고 화면을 사라지게 한다던가 최소화를 시켜야 할 때가 있다.


우선 아래와 같은 방법으로 폼을 사라지게 하지 않게 한다.


1
2
3
4
5
6
7
8
9
#region MainForm_FormClosing
/// <summary>
/// 폼이 닫히기 전에 발생합니다.
/// </summary>
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}
#endregion
cs


이렇게 하면 폼에서 'x' 눌러도 종료가 되지 않고 최소화가 된다.


그리고 종료를 할 때는 트레이 아이콘에서 컨텍스트메뉴를 띄워 종료를 할 수 있게 만들었다.


문제는 저렇게 만들었을 때 문제가 발생했는데 최소화를 시킨 다음에 종료를 시켰음에도 프로그램 종료가 되지 않았다.


그래서 어떻게 하나 찾아보니 두가지 방법이 나오는데


첫번째는 아래와 같이 Close 사유를 명시해주는 것인데 CloseReason이 UserClosing가 된다. 이렇게 수정을 하니 바로 종료가 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
#region MainForm_FormClosing
/// <summary>
/// 폼이 닫히기 전에 발생합니다.
/// </summary>
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    // 'X' 눌렀을 때 Form이 사라지고, 작업표시줄이 사라집니다.
if (e.CloseReason == CloseReason.UserClosing)
    {
        e.Cancel = true;
    }
}
#endregion
cs



두번째로는 전역변수로 isClose bool 변수를 하나 만들고 isClose 가 false 일 때만 동작되도록 만들면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool isClose = false;

#region MainForm_FormClosing
/// <summary>
/// 폼이 닫히기 전에 발생합니다.
/// </summary>
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.isClose == false)            
    {
        e.Cancel = true;
        this.Visible = false;
        this.ShowInTaskbar = false;
    }
}
#endregion
cs


둘 다 테스트 했을 때 동작이 되었는데 아무래도 첫번째 것이 더 직관적이기에 쓰는게 좋지 않을까 싶다.

+ Recent posts