본문 바로가기
2_ 바삭바삭 프로그래밍/C# and Visual C++

[C#] Alt+F4로 폼 닫는 것 막기

by 준환이형님_ 2013. 2. 27.


폼 닫을때 세이브 메소드를 넣고 싶어서



출처: http://bytes.com/forum/thread256124.html


Alt+F4 버튼으로 폼을 닫아버리면 안 되도록 설정해야 하는 경우가 종종 있습니다.

최근에 프로그래밍을 하다보니 멀티쓰레딩으로 작업하다가 Alt+F4버튼을 눌러서 닫아버리면 오류가 나더군요..

왜 오류가 날까? 라는 생각보다 Alt+F4 버튼을 막아야 겠군! 이라는 생각이 먼저 들더군요 ㅡㅡ;

그래서 여러 가지 생각을 해 봤는데요..

1. 예전에 쓴 방법 중 하나는 다른 폼으로 무조건 포커스를 옮기는 것이었습니다.

그 때는 하나의 폼에만 포커스가 있으면 되는 경우였으니까 가능했지만. 포커스를 유지하면서 Alt+F4를 막으려면 다른 방법을 써야 했죠~

많은 분들이 사용하는 방법 중 하나는..

2. OnClosing() 메써드를 오버라이드 해서 닫히는 이벤트를 Cancel 시키는 방법입니다.

이 방법의 단점은 Close() 메써드로 창을 닫으려고 해도 안 닫힌다는 것입니다.

즉 창을 닫을 수가 없다는 것??? ㅡㅡ;;

정말 닫을 수 없는지 고민해 보지는 않아서 확신은 못 하지만.. 일단 Close()로는 안 닫히는 것 같더군요

3. 그래서 KeyDown 이벤트를 사용하는 방법을 추천합니다!

우선은 KeyPreview 속성을 true로 설정해 주시고

KeyDown 이벤트 안에.. Alt+F4 가 눌릴 때 e.Handled = true;로 설정해 주기만 하면 됩니다.

e.Handled = true; 의 기능은... 이미 키가 눌린 이벤트가 다 처리되었으니 신경쓰지 말아라~ 라는 뜻입니다.

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Alt && e.KeyCode == Keys.F4)
                e.Handled = true;
        }

 이렇게 적어주면 되겠죠? ㅎ