2013-05-26 2 views
2

Я пытался сделать Form1 видимым от Form2. Что происходит в моей программе, так это то, что вы нажимаете кнопку в form1, чтобы скрыть form1, тогда появится всплывающее окно Form2 ... Но когда таймер заканчивается на Form2, он должен спрятаться, и Form1 должен появиться назад. Но когда я пытаюсь запустить я получаю это:Отображение формы1 из формы2

1>c:\users\devon\documents\visual studio 2010\projects\retaliation\retaliation\Form2.h(122): error C2039: 'Form1' : is not a member of 'Retaliation::Form2' 

(. Ps Возмездие название программы).

Вот мой код (который имеет #include "Form1.h" наверху)

#pragma once 
    #include "stdAfx.h" 
    #include "Form1.h" 

    namespace Retaliation { 

using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Windows::Forms; 
using namespace System::Data; 
using namespace System::Drawing; 
using namespace System::IO; 
using namespace std; 


/// <summary> 
/// Summary for Form2 
/// </summary> 
public ref class Form2 : public System::Windows::Forms::Form 
{ 
public: 
    int MoviePlay; 

public: 
    int TickL; 
    Form2(void) 
    { 
     InitializeComponent(); 
     // 
     //TODO: Add the constructor code here 
     // 
    } 

protected: 
    /// <summary> 
    /// Clean up any resources being used. 
    /// </summary> 
    ~Form2() 
    { 
     if (components) 
     { 
      delete components; 
     } 
    } 
private: AxWMPLib::AxWindowsMediaPlayer^ MoviePlayer1; 
private: System::Windows::Forms::Timer^ timer1; 
private: System::ComponentModel::IContainer^ components; 
protected: 

protected: 

private: 
    /// <summary> 
    /// Required designer variable. 
    /// </summary> 


    #pragma region Windows Form Designer generated code 
    /// <summary> 
    /// Required method for Designer support - do not modify 
    /// the contents of this method with the code editor. 
    /// </summary> 
    void InitializeComponent(void) 
    { 
     this->components = (gcnew System::ComponentModel::Container()); 
     System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form2::typeid)); 
     this->MoviePlayer1 = (gcnew AxWMPLib::AxWindowsMediaPlayer()); 
     this->timer1 = (gcnew System::Windows::Forms::Timer(this- >components)); 
     (cli::safe_cast<System::ComponentModel::ISupportInitialize^ > (this->MoviePlayer1))->BeginInit(); 
     this->SuspendLayout(); 
     // 
     // MoviePlayer1 
     // 
     this->MoviePlayer1->Enabled = true; 
     this->MoviePlayer1->Location = System::Drawing::Point(0, -1); 
     this->MoviePlayer1->Name = L"MoviePlayer1"; 
     this->MoviePlayer1->OcxState = (cli::safe_cast<System::Windows::Forms::AxHost::State^ >(resources- >GetObject(L"MoviePlayer1.OcxState"))); 
     this->MoviePlayer1->Size = System::Drawing::Size(860, 547); 
     this->MoviePlayer1->TabIndex = 0; 
     this->MoviePlayer1->Enter += gcnew System::EventHandler(this, &Form2::axWindowsMediaPlayer1_Enter); 
     // 
     // timer1 
     // 
     this->timer1->Interval = 1000; 
     this->timer1->Tick += gcnew System::EventHandler(this, &Form2::timer1_Tick); 
     // 
     // Form2 
     // 
     this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 
     this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 
     this->ClientSize = System::Drawing::Size(859, 495); 
     this->Controls->Add(this->MoviePlayer1); 
     this->Name = L"Form2"; 
     this->Text = L"Form2"; 
     this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load); 
     (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->MoviePlayer1))->EndInit(); 
     this->ResumeLayout(false); 

    } 
    #pragma endregion 
private: System::Void axWindowsMediaPlayer1_Enter(System::Object^ sender,  System::EventArgs^ e) { 
     } 
private: System::Void Form2_Load(System::Object^ sender, System::EventArgs^ e) { 
      String^ Movie = File::ReadAllText("Movie.txt"); 
      if (Movie == "1") 
      { 

      MoviePlayer1 -> Ctlcontrols -> play(); 
      } 

     } 
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { 
      TickL += 1; 
      if (Movie == "1") 
      { 
      if (TickL == 47) 
      { 
       this -> timer1 -> Stop(); 
       TickL = 0; 
       this -> Hide(); 
       this -> Form1 -> Show(); 

      } 
      } 
     } 
}; 
    } 

ответ

2

Что вам нужно сделать, это передать ссылку на Form1 в то время он создает и показывает Form2. Затем, когда Form2 закрывается, он может использовать эту ссылку, чтобы снова показать Form1.

Так изменить Form2 иметь переменную с private члена ссылаться Form1 и установить это в конструкторе

public ref class Form2 : public System::Windows::Forms::Form 
{ 
private: 
    Form1 ^m_pMainForm; 

public: 
    Form2(Form1 ^pMainForm) 
    { 
     InitializeComponent(); 

     // save reference to main form 
     m_pMainForm = pMainForm; 
    } 
    // ... etc. 

Затем измените код в Form1, который создает Form2 передать ссылку на себя

public SomeMethodInForm1() 
{ 
    // create and show Form2 
    Form2 ^pFormTwo = gcnew Form2(this); // pass a reference to Form1 
    pFormTwo->Show(); 
} 

Наконец, в Form2, вы можете использовать сохраненную ссылку для повторного отображения Form1

public SomeMethodInForm2() 
{ 
    // redisplay Form1 
    m_pMainForm->Show(); 

    // ... close Form2 or whatever you want to do 
} 

В зависимости от порядка деклараций классов вам может потребоваться добавить декларацию вперед для одной из форм или, возможно, разделить код между заголовком и определением, но это небольшая деталь. Просто отправьте еще один вопрос, если вы все еще застряли.

0

При вызове формы2 из формы1 скрыть форму1, а затем вызывать форму2. После вызова формы2 покажите форму1.

частная: System :: Пустота button1_Click (System :: Object^отправителем, System :: EventArgs^е) {

this->Visible = false; 
Form2^ f2 = gcnew Form2; 
f2->ShowDialog(); 

this-> Visible = истина;

 } 

};

Смежные вопросы