2012-09-24 3 views
0

여러 양식으로 VCL 양식 응용 프로그램을 만들고 있습니다. formCreateAppointment라는 새로운 폼을 만들었습니다.VCL 다른 양식 표시

나는이 menuItem에서이 코드를 통해 양식을로드하려고 :

formCreateAppointment.Show(); 

나는이 오류가 무엇입니까 :

E2451 정의되지 않은 기호 'formCreateAppointment'

내가 선언해야합니까 '글로벌'객체 또는 이와 유사한 형태의이 형태?

감사

추가 정보

양식 'formCreateAppointment'는 프로젝트 - 아래 -> 옵션 -> 자동 생성 형태. 내가 코드를 사용하는 경우 :

formCreateAppointment->Show(); 

내 코드는 컴파일되지 않습니다 나는 다음과 같은 오류 얻을 : 어딘가에

E2451 정의되지 않은 기호 로컬 변수로 'formCreateAppointment'

답변

2

는, 생성 된 .HPP 파일은 당신을위한 글로벌 포인터, 예를 들어 있습니다 #include는 '하지, 당신의 주요 코드로 예를 들면 그 .HPP 파일을 D :

#include "Unit2.hpp" // (or whatever you decided to name that Form's unit as) 

당신이 양식 프로젝트 O에 자동 생성 할 것을 설정하는 경우 (프로젝트의 WinMain() 함수에 Application->CreateForm()에 대한 호출을 삽입하여) 글로벌 포인터가 프로그램 시작시 자동으로 인스턴스화됩니다. 그렇지 않으면 코드 대신 new 연산자를 사용하여 수동으로 인스턴스화해야합니다.

어느 쪽이든 변수는 포인터입니다. VCL 객체는 스택에서만 인스턴스화 될 수 없으며 힙에서만 인스턴스화 될 수 있습니다.당신은 Form 객체의 멤버에 액세스 할 수 -> 연산자를 사용해야합니다, 예를 들면 :

(*formCreateAppointment).Show(); 
+0

감사합니다. 모든 일. – user1690531

0

분명히 사용자가 만든 양식을 그렇지 않으면, 당신이 그것을 호출하려고하는 곳으로부터 액세스 할 수없는 이유입니다.

당신은이 문제를 해결하기 위해 세 가지 방법을 사용할 수 있습니다

  • 당신이 그것을 보여 가고있는 정확한 장소에있는 양식을 만듭니다. 그러나 한 곳에서 양식을 호출 할 경우에만 작동합니다.
  • 전역 변수로 만듭니다.
  • 힙에 만들고 기본 폼에 포인터를 저장하십시오. 예를 들면 : 당신은 같은

    #ifndef Unit2H 
    #define Unit2H 
    
    #include <Classes.hpp> 
    //... 
    
    class TformCreateAppointment : public TForm 
    { 
        //... 
    }; 
    
    extern PACKAGE TformCreateAppointment *formCreateAppointment; // <-- here 
    
    #endif 
    

    그것은 소리 : 당신은 IDE에서 새 폼 클래스를 만들 때

    class MyMainForm 
    { 
    public: 
        MyMainForm() 
        { 
         //create the form in the constructor 
         formCreateAppointment = new myOtherForm(); 
        } 
        ~MyMainForm() 
        { 
         delete formCreateAppointment; 
        } 
        //code 
    private: 
        myOtherForm * formCreateAppointment; 
    } 
    
+0

양식 : 대신 당신이 먼저 포인터 역 참조에있는 . 연산자를 사용하려면

formCreateAppointment->Show(); 

변수가 아닙니다. 그것은 컨트롤과 관련된 다른 개체가있는 폼입니다. 그 이름은 formCreateAppointment입니다. 그냥 간단한 .show 메서드를 사용하여 표시하지 않습니까? – user1690531

+0

@user 형식은 변수가 아니며 _ 개체 _입니다. 다른 개체와 마찬가지로 먼저 개체를 만들어야하며 그 후에 개체의 메서드라고 부를 수 있습니다. – SingerOfTheFall