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
[1993] Re:여러개의 DBEdit control에서 값이 변경되었는지..
유태희 [] 3271 읽음    1999-09-27 00:00
: : 안뇽하세엽?
: : 너굴휩니다.
: :
: : DBEdit control or DBComboBox의 경우 값이 변경되면
: : 변경이 되었는지 안되었는지 체크를 어떻게 하는건가여?
: :
: : 한두개는 직접 해도 상관 없지만
: : 10개 이상을 일일이 직접하는것은 상당한 노가다일것 같아엽...
: :
: : 제 프로그램은 지금 DBGrid에서 하나의 레코드를 더블클릭하면
: : 그것의 내용을  잘 알아 볼 수 있도록 새 폼을 생성시킵니다.
: : 이때 원래의 DataSet과는 다른 TQuery를 사용합니다.
: :
: : 요럽게..
: :
: : void __fastcall TfrmMain::DBGrid1DblClick(TObject *Sender)
: : {
: :     AnsiString tempqry;
: :
: :     tempqry = "select * from cable.db where CABLEID ='" + DM->Query1->FieldByName("CABLEID")->AsString +"'";
: :     DM->Query10->Close();
: :     DM->Query10->SQL->Clear();
: :     DM->Query10->SQL->Add(tempqry);
: :     frmConn->ShowModal();
: : }
: :
: : frmConn이라는 폼은 DBEdit or DBComboBox를 사용해서 디비 내용을 보여 줍니다.
: : 이런경우 만약 에디트 박스의 값을 하나라도 수정했을 경우에만
: : Update시키려고 합니다.
: :
: : 어떤 방법이 가장 이상적인 방법일가여?
: : 며칠 고민하다가.. (다른것도 하면서 ^^ )
: : 제 머리를 탓하면서 요기에 질문 올립니다.
: : 그럼 부탁드립니다.
:
:
:
: 임펠리테리입니다.
:
: DBComboBox나 DBEdit 등은 일반적인 TComboBox나 TEdit와 마찬가지로 OnChange 이벤트를
: 가지고 있습니다. 이 이벤트가 바로 원하시는 동작을 해줍니다.
:
: 새로 만드시는 폼 클래스의 private 섹션에 다음과 같이 추가합니다.
: class TSubForm : public TForm
: {
: ...
: private:
:     bool Modified;
:     void __fastcall EditComboBoxChange(TObject *Sender);
: ...
: };
: 그리고 Modified 변수를 초기화하기 위해 폼을 더블클릭해서 OnCreate 핸들러를 작성합니다.
: (자동으로 false값이 주어지기는 합니다만 명시적으로 지정해주는 것이 좋습니다.)
: void __fastcall TSubForm::FormCreate(TObject *Sender)
: {
:     Modified = false;
: }
:
: 그리고 다음과 같이 코딩합니다.
: void __fastcall TSubForm::EditComboBoxChange(TObject *Sender)
: {
:     Modified = true;
: }
:
: 그리고 시프트 키를 누른채로 폼 위의 모든 디비에디트, 디비콤보박스를 클릭하여 모두 선택합니다.
: 그런 후 오브젝트 인스펙터에서 OnChange 이벤트 항목을 선택했을때 나타나는 콤보박스의
: 아래쪽 화살표 버튼을 눌러 리스트를 나타나게 한 후, EditComboBoxChange를 선택합니다.
:
: 이것으로 끝입니다. 이제 서브폼의 어떤 디비에디트/디비콤보박스의 내용을 수정했더라도
: 무조건 EditComboBoxChange() 함수가 실행되고, 그때마다 Modified는 true로 설정됩니다.
: 폼을 닫으면서 무언가가 수정되었는가 확인하려면 이 Modified 변수만 확인하면 되겠죠?
:
: 간단한 걸 너무 자세히 설명했나... ^^;;;;
: 그럼 참고하시길...
답변 감사힙니다.
그런데 한가지가 잘못된것 같더군여..
임프님께서 말씀하신대로 DBComboBox는 그렇게 하면 되는데여..
DBEdit에서는 OnChange 이벤트 처리를 제대로 안하더군여..
도움말을 찾아보니 OnChange이벤트가 발생할때 DBEdit의 Modified() 내장함수를 사용해서
처리를 해 주어야 했어여..
다음은 제가 처리한 부분입니다.

void __fastcall TfrmConn::DBEdit14Change(TObject *Sender)
{
    Modified = DBEdit14->Modified |
                DBEdit15->Modified |
                DBEdit16->Modified |
                DBEdit17->Modified |
                DBEdit18->Modified |
                DBEdit19->Modified |
                DBEdit20->Modified |
                DBEdit21->Modified |
                DBEdit22->Modified |
                DBEdit23->Modified |
                DBEdit24->Modified |
                DBEdit25->Modified |
                DBEdit26->Modified ;

}

임프님 덕분에 문제 해결봤습니다. ^^
이벤트처리를 하나만 해 놓구 그 이벤트를 선택해서 사용한다는
아이디어를 미처 생각하지 못했었네요.. ^^;


+ -

관련 글 리스트
1984 여러개의 DBEdit control에서 값이 변경되었는지 체크할때.. 유태희 3232 1999/09/22
1986     Re:여러개의 DBEdit control에서 값이 변경되었는지 체크할때.. 박지훈.임프 3381 1999/09/23
1993         Re:여러개의 DBEdit control에서 값이 변경되었는지.. 유태희 3271 1999/09/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.