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; 의 기능은... 이미 키가 눌린 이벤트가 다 처리되었으니 신경쓰지 말아라~ 라는 뜻입니다.
최근에 프로그래밍을 하다보니 멀티쓰레딩으로 작업하다가 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;
}
{
if (e.Alt && e.KeyCode == Keys.F4)
e.Handled = true;
}
이렇게 적어주면 되겠죠? ㅎ