사용자가 정상적인 입력 및 기타의 행위를 마무리 하지 않고 나가기Button을 누르고 나가는 경우 Form Unload시 Check해야할 Event가 있을때 난감하다. 사용자가 다양하니까. 꼴밤을 먹일 수 도 없고

 BAS모듈에서 선행할 일

1.선언
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

Private Const MF_BYPOSITION = &H400&

2.함수(BAS모듈에 생성)

Public Sub RemoveCancelMenuItem(frm As Form)
   Dim hSysMenu As Long
   hSysMenu = GetSystemMenu(frm.hwnd, 0)
   Call RemoveMenu(hSysMenu, 6, MF_BYPOSITION)
   Call RemoveMenu(hSysMenu, 5, MF_BYPOSITION)
End Sub


1.Form내에서 닫기버튼 없애기

   Form Load Event에서
   RemoveCancelMenuItem Me / Class.RemoveCancelMenuItem Me를 입력하면 닫기버튼이 없어진다.

2.다른 Form에서 제어할 경우(A Form에서 B Form의 닫기버튼 없애기)

     A Form에서   원하는 위치에
     RemoveCancelMenuItem B_Form
     A_Form.Show vbModal 를 입력하면 닫기버튼이 없어진다

3.기타사항

  별도의 나가기 버튼을 만들어 사용자가 Form에서 Unload시 입력값에 대한 Check하시면 됩니다.
  통상 기본적으로 Form에서 제공되는 나가기 버튼에서 Control하기 힘든 경우 이용하시면 편합니다.


Posted by 사용자 핑구야 날자

댓글을 달아 주세요

  1. 쿠쿠양 2009.05.21 16:46 신고  댓글주소  수정/삭제  댓글쓰기

    오...어렵네요 +__+;; 제가 이런데 약해서리;;

  2. 상오기™ 2009.05.21 17:46 신고  댓글주소  수정/삭제  댓글쓰기

    앗~ 비베다 ^^
    전에 야후 영어 사전을 이용한 단어장 만들었다가 이것들이 인코딩 방식을 바꿔 버리는 바람에(UTF-8 이었던가) 지금까지 버려두고 있는 프로그램이 생각 나네요
    UTF-8 읽어오는걸 처리 못해서 버려둠...ㅠ.ㅠ

  3. 떠돌이세어 2009.05.21 19:08 신고  댓글주소  수정/삭제  댓글쓰기

    비베..고등학교때 보고 오랜만에 보는..;

  4. 뷰티가이드 2009.05.21 20:09  댓글주소  수정/삭제  댓글쓰기

    앗 ㅋㅋㅋ X가 사실 가출버튼이었군요 ㅋㅋㅋ

  5. 질문자 2014.06.14 19:24  댓글주소  수정/삭제  댓글쓰기

    굉장히 찾던 코드 입니다. 근데 'hwnd'은(는) 'System.Windows.Forms.Form'의 멤버가 아닙니다. 라고 오류가뜨는데 이건 어떻게 해결해야 될까요?

  6. 질문자 2014.06.15 20:24  댓글주소  수정/삭제  댓글쓰기

    답변 감사합니다. bas 모듈을 써본적이 없어서 어렵네요.
    프로젝트->새항목추가->모듈->a.bas 프로젝트에 추가를 했고 Module a와 End Module 사이에 빨간색 상자의 코드들을 모두 입력했는데 그래도 역시 문제가 해결이안되네요. 선언부분만 Module 바깥으로 빼면 '네임스페이스에서는 문을 사용할수 없습니다'라고 나오네요
    bas파일에 선언부분과 함수부분을 어떻게 나누면 좋을까요?