|
무엇인가 옵션을 설정하는 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으로 선언하는 것 중 어느 것이 더 좋을까요?
|