C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[63030] Re:질문이 있습니다(maskedit 에러 질문)
장성호 [nasilso] 1776 읽음    2010-11-15 14:51
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  
: ---------------------------
:
: 디버그모드 및 릴리스 모드 둘 다 결과 동일합니다.
:
: 혹시 최신버전의 빌더나 델파이쓰고 계신가요? 이런 에러가 나진 않나요? 하도 궁금해서 여쭤 봅니다.
:
: 제가 본 다른 프로그램은 마스크에디트쓰는 도중에 엔터나 탭을 쳐도 그냥 포커스를 자연스럽게 이동합니다. 이것이 정상일 듯한데(정상은 아니지만)제가 배포하는 프로그램을 사용자가 잘못 입력할 수도 있는데 저런 예외에러 박스를 표시하고 중단되면 너무 심하지 않나 하는 생각이 듭니다. 그냥 컴포넌트 하나 새로만들 수도 없고(아직 방법을 모름...ㅠㅠ)

+ -

관련 글 리스트
63021 질문이 있습니다(maskedit 에러 질문) 동철이 1213 2010/11/13
63030     Re:질문이 있습니다(maskedit 에러 질문) 장성호 1776 2010/11/15
63033         감사합니다. 자세한 설명에...(내용무) 동철이 865 2010/11/15
63029     Re:질문이 있습니다(maskedit 에러 질문) 김태선 2085 2010/11/15
63022     Re:질문이 있습니다(maskedit 에러 질문) 뭐인가요 1181 2010/11/13
63026         Re:Re:질문이 있습니다(maskedit 에러 질문) 동철이 1041 2010/11/15
63028             Re:Re:Re:질문이 있습니다(maskedit 에러 질문) Lyn 1181 2010/11/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.