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
[17674] [q] Modal DialogBox 의 구현.
유지상 [newjisang] 1176 읽음    2002-04-16 21:28
무엇인가 옵션을 설정하는 Modal Dialog의 구현에 관한 내용입니다.
두 대의 폼 (또는 두 개의 윈도우) Form1 과 Form2 가 있습니다.
Form1 에서 어떤 버튼이 눌리면, Form2 가 모달다이얼로그로써 나오게 됩니다.
그래서 그 때 나온 모달다이알로그박스 Form2 에서 사용자가 여러가지 설정변경을 합니다. 사용자가 그 때 변경하려고 하는 것은 Form1의 맴버변수들의 값이기 때문에, Form2에서의 사용자 조작으로 인해 최종적으로 변화되는 값은 Form1의 맴버변수값들입니다.
Form2에는 Ok버튼과 Cancel버튼이 있게합니다.

이를 구현하는 두가지의 방법이 있습니다.

방법 1:
이 방법으로는 Form1에서 모달다이얼로그박스를 불러오는 버튼을 누를 경우 시행되는 코드는 간단히 하면 다음과 같습니다.
void __fastcall TForm1::btnOptionClick(TObject *Sender)
{
  Form2->A = this->A;
  if(Form2->ShowModal() == mrOk)
    this->A = Form2->A;
}
위의 코드대로 하면, Form2에서 바뀌는 것은 Form2자신의 A의 값이며, Form2가 직접 Form1의 A의 값을 바꾸지는 않습니다.

그런데 이런 방법 외에 다음과 같은 방법으로 할 수도 있습니다.

방법 2:
일단 Form2가 Form1의 A를 접근할 수 있도록 합니다. Form1의 A를 public으로 선언하거나, 또는 Form2를 Form1의 friend로 선언하거나 하면 되겠죠. 그리고 이 경우에는 Form2는 A라는 맴버변수를 가지지 않습니다. Form2에서 직접 Form1의 A의 값을 바꾸는 것입니다. 이 경우, Form1의 버튼클릭이벤트헨들러는 아래와 같습니다.
void __fastcall TForm1::btnOptionClick(TObject *Sender)
{
  Form2->ShowModal();
}

방법2는 Form1의 버튼클릭이벤트헨들러도 간단해지고, 또한 Form2가 맴버변수 A를 가지지 않아도 된다는 점에서 방법1에 비해서 간단합니다.
그리고, Form2에 Ok,Cancel 이외에 Apply버튼까지 있었다면, 방법1로는 구현이 안됩니다.
그런데 제가 Visual C++ 를 배울 때는 , 언제나 방법1처럼 하는 것이 권장되었습니다.

과연 방법1과 방법2중 어느 것이 더 좋은 방법일까요?
만약 방법2를 사용한다면, Form2를 Form1의 friend로 선언하는 것과, Form1의 A를 public으로 선언하는 것 중 어느 것이 더 좋을까요?

+ -

관련 글 리스트
17674 [q] Modal DialogBox 의 구현. 유지상 1176 2002/04/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.