MaskEdit를 평소 잘 쓰지 않아서 그런특징이 있는줄 잘 몰랐는데요
오늘 잠깐 에러나는 부분만 살펴보고 답변드립니다.
에러나는 이유
에러나는 이유는..
대게 Enter키나 Tab키가 입력할대는 입력이 완료될때이므로..
그때 .. 입력완료체크를 합니다.
Tab키를 치지 않더라도 Mouse로 Focus를 다른 control로 이동시켜도 입력완료체크를 하는데..
이때 MaskEdit에 입력된 값이 틀리면 에러메세지가 발생하는것입니다.
에러메세지가 발생하지 않게 하려면
입력된 값이 잘못되었더라도 에러메세지가 나지 않게 하려면?
1. 먼저 ENTER키에 대한 처리로써..
MaskEdit의 OnKeyPress이벤트에서 Key값이 VK_RETURN일때..
Key값을 0로 변경해주시면 됩니다.
void __fastcall TForm1::MaskEdit1KeyPress(TObject *Sender, char &Key)
{
if(Key==VK_RETURN)
{
Key=0;
}
}
2. 두번째로 .. Tab키나 Mouse로 Focus를 이동시켰을때에 대한 처리는...
CM_EXIT 메세지에 입력값 체크하도록 되어있습니다.
sub-classing하여서 CM_EXIT메세지를 필터링 해버리면
입력값이 잘못되어도 에러메세지가 나타나지 않습니다.
다른 방법
또다른 방법으로는...
TCustomMaskEdit 의 ValidateError 메소드에서 예외를 발생시켜주는데..
이 함수가 virtual로 선언되어있습니다.
TMaskEdit를 교체식으로 선언하여서
ValidateError 메소드를 하나 override하여서 만들고 안에 아무코딩하지 않으면 됩니다.
그럼..
동철이 님이 쓰신 글 :
: BCB 6.0 (업데이트4 적용됨)으로 작업중입니다.
:
: maskedit를 이용하여 전화번호를 입력받습니다. ___-___-____ 이런 스타일입니다.
: 그런데 사용자가 번호를 입력하든 중간에
:
: ex) 704-___-____ (4를 누른 후)
:
: 엔터키나 탭키를 치면 다음과 같은 예외 에러가 납니다.
:
: ---------------------------
: Debugger Exception Notification
: ---------------------------
: Project Project1.exe raised exception class EDBEditError with message 'Invalid input value. Use escape key to abandon changes'. Process stopped. Use Step or Run to continue.
: ---------------------------
: OK Help
: ---------------------------
:
: 디버그모드 및 릴리스 모드 둘 다 결과 동일합니다.
:
: 혹시 최신버전의 빌더나 델파이쓰고 계신가요? 이런 에러가 나진 않나요? 하도 궁금해서 여쭤 봅니다.
:
: 제가 본 다른 프로그램은 마스크에디트쓰는 도중에 엔터나 탭을 쳐도 그냥 포커스를 자연스럽게 이동합니다. 이것이 정상일 듯한데(정상은 아니지만)제가 배포하는 프로그램을 사용자가 잘못 입력할 수도 있는데 저런 예외에러 박스를 표시하고 중단되면 너무 심하지 않나 하는 생각이 듭니다. 그냥 컴포넌트 하나 새로만들 수도 없고(아직 방법을 모름...ㅠㅠ)