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
[4892] Re:Re:Re: 자세한 내용을 알려주세요.
박지훈.임프 [cbuilder] 3043 읽음    2001-01-12 21:12
최은영 님이 쓰신 글 :
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit1.h"
: #include "Unit2.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm1 *Form1;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
:         : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::FormActivate(TObject *Sender)
: {
: Form2->Show();
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: Form2->Show();
: }
: //---------------------------------------------------------------------------
:
:
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit2.h"
: #include "Unit1.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm2 *Form2;
: //---------------------------------------------------------------------------
: __fastcall TForm2::TForm2(TComponent* Owner)
:         : TForm(Owner)
: {
:
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm2::ComboBox1Click(TObject *Sender)
: {
:               Edit1->Text=ComboBox1->Items->Strings[ComboBox1->ItemIndex];
: }
:
: //---------------------------------------------------------------------------
: void __fastcall TForm2::Button1Click(TObject *Sender)
: {
:         Form1->Edit1->Text=Edit1->Text;
:         Form2->Hide();//혹은 Form2->Close();
: }
: //---------------------------------------------------------------------------
:
: 가 소스 입니다.
: form1 에는 버튼 하나와 텍스트
: form2 에는 버튼 하나와 텍스트 콤보 박스가 있죠
: 두 form 모두 form style 은 fsnormal입니다.
: 메인은 form1입니다.
: form2에 버튼을 클릭하면 form2에 있던 텍스트 내용이 form1의 텍스트로 잘가거든요.
: 근데 form2를 화면에서 안보이게 할려구요...자주 엑세스 하진 않지만 form2를 다시
: 불러서 써야 하는 경우가 있거든요...
: 위와 같이 하니까
: Project Project1.exe raised exception class ElnvaludOperation with message 'Canno change
: Visible in OnShow or Onhide'. Process stopped . Use Step or Run to continue.라는 메세지가
: 나옵니다.
: 책을 보니 Action 파라미터 들이 있던데 이런 것도 어떻게 쓰다는 예제가 없는
: 책이어서요...
: 부탁드려요....
:


임펠리테리입니다.

Form2를 클로즈하려고 하면 Form1이 포커스를 받으므로 다시 OnActivate가 발생하게 되지요? 그런데 OnActivate에서 Form2를 Show()하는 코드를 넣어두었으므로 아직 Form2가 닫히지 않은 상태에서 Form2가 다시 Show() 이벤트를 받게 된겁니다.

아마도, 처음에 프로그램이 시작되자마자 두개의 폼이 다 나오도록 하기 위해 그렇게 하신 것 같은데, OnActivate 이벤트는 포커스를 받을 때마다 매번 실행되므로 이런 문제가 생깁니다. 그렇다고 해서 OnCreate에 코딩을 하면 이때는 Form2 가 생성되기 이전이므로 억세스 바이얼레이션 에러가 발생합니다.

그러므로 OnShow()에다 코딩을 하시든지, 혹은 꼭 OnActivate를 쓰시고 싶으시다면 다음과 같이 코드를 수정하세요.
void __fastcall TForm1::FormActivate(TObject *Sender)
{
    static bool First = true;
    if(!First) return;
    Form2->Show();
    First = false;
}

그럼 참고하시길...

+ -

관련 글 리스트
4884 [질문]2개 이상의 폼을 사용할 경우 어떻게 조작해야나요? 최은영 2969 2001/01/12
4888     Re:[질문]2개 이상의 폼을 사용할 경우 어떻게 조작해야나요? -> 자세한 내용을 알려주세요. 박지훈.임프 3000 2001/01/12
4891         Re:Re: 자세한 내용을 알려주세요. 최은영 2980 2001/01/12
4892             Re:Re:Re: 자세한 내용을 알려주세요. 박지훈.임프 3043 2001/01/12
4896                 Re:Re:Re:Re: 자세한 내용을 알려주세요. 최은영 2939 2001/01/13
4899                     Re:Re:Re:Re:Re: 자세한 내용을 알려주세요. 박지훈.임프 2978 2001/01/13
4904                         감사합니다..........................! 최은영 3004 2001/01/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.