Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Компилятор не видит формы


Автор: sanek1990 13.11.2009, 09:21
Здравствуйте, я меня возникла следующая проблема, начал изучать С++ по книге http://www.sprinter.ru/books/1816459.html, так вот споткнулся на таком примере. Необходимо вызвать из главной формы еще две формы, одну в модальном режиме другую в немодальном(обычном) режиме. я все сделал как там написано, но не могу подключить эти две формы к главной.
Автор пишет: "Чтобы формы были видны одна из другой надо в h-файле для главной формы перед  самой первой командой using namespace"
поместить операторы: 
#include "Form2.h"
#include "Form3.h"
"
все делаю так но компилятор не видит формы
http://radikal.ru/F/i014.radikal.ru/0911/f7/4885ccc692df.gif.html

http://radikal.ru/F/i059.radikal.ru/0911/f9/8f1b8ca373b7.gif.html

Подскажите пожалуйста, что не так?

Код

#pragma once

namespace Forms1 {

#include "Form2.h"
#include "Form3.h"

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            
        }

    protected:        
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button3;
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::Button^  button2;
    protected: 

    protected: 

    private:
        
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        
        void InitializeComponent(void)
        {
            this->button3 = (gcnew System::Windows::Forms::Button());
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->button2 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button3
            // 
            this->button3->Location = System::Drawing::Point(12, 12);
            this->button3->Name = L"button3";
            this->button3->Size = System::Drawing::Size(49, 249);
            this->button3->TabIndex = 0;
            this->button3->Text = L"Выход";
            this->button3->UseVisualStyleBackColor = true;
            this->button3->Click += gcnew System::EventHandler(this, &Form1::button3_Click);
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(77, 49);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(203, 49);
            this->button1->TabIndex = 1;
            this->button1->Text = L"Вызов Form2 в модальном режиме";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click_1);
            // 
            // button2
            // 
            this->button2->Location = System::Drawing::Point(77, 167);
            this->button2->Name = L"button2";
            this->button2->Size = System::Drawing::Size(203, 58);
            this->button2->TabIndex = 2;
            this->button2->Text = L"Вызов Form3 в немодальном режиме";
            this->button2->UseVisualStyleBackColor = true;
            this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(292, 273);
            this->Controls->Add(this->button2);
            this->Controls->Add(this->button1);
            this->Controls->Add(this->button3);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);

        }
#pragma endregion
    
private: System::Void button1_Click_1(System::Object^  sender, System::EventArgs^  e) {
                //открытие Form2

                 System::Windows::Forms::DialogResult dr;
                 Form2 ^newDlg = gcnew Form2();
m:                 dr = newDlg->ShowDialog();
                 /*Вызывается Form2 в модальном режиме. В dr запоминается значение DialogResult.
                 Когда Form2 закроется, то значение ее свойства DilaogResult будет сравниватся с dr
                 (там перед закрытием формы мы внесем значение ОК в DialogResult:)*/

                 if (dr == System::Windows::Forms::DialogResult::OK)
                     return;
                 else
                 {
                     MessageBox::Show("Ошибка закрытия Form2");
                     goto m;
                 }
             }

private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
                 //Вызов Form3
                 Form3 ^f3 = gcnew Form3();
                 f3->Show();
             }
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
         }
private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) {
             this->Close();
         }
};
}
Код








Автор: mes 13.11.2009, 10:26
 вытащите инклуды из неймспейса..
 приведите содержимое файла Form2, мож там у Вас все тоже в неймспейсе лежит..

Автор: sanek1990 13.11.2009, 10:35
Вытащил инкулды из неймспейса, 

Код

#pragma once

#include "Form2.h"
#include "Form3.h"

namespace Forms1 {

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


Листинг Form2
 
Код

#pragma once

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


namespace Forms {

    public ref class Form2 : public System::Windows::Forms::Form
    {
    public:
        Form2(void)
        {
            InitializeComponent();
            
        }

    protected:
        ~Form2()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    protected: 

    private:
        
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(94, 96);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(124, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"Вызов Form1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);
            // 
            // Form2
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(292, 273);
            this->Controls->Add(this->button1);
            this->Name = L"Form2";
            this->Text = L"Form2";
            this->ResumeLayout(false);

        }
#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 this->DialogResult = System::Windows::Forms::DialogResult::OK;
                 this->Close(); // закрытие form2
             }
    };
}

Цитата

мож там у Вас все тоже в неймспейсе лежит..

а сюда надо что то подключать?  просто в книжке ни слова про инклуды в form2 и form3.

Автор: bsa 13.11.2009, 11:43
sanek1990, твой код к С++ отношения не имеет. Это C++/CLI он же .NET (похожее название - уловка маркетологов). Поэтому вопросы надо размещать в соответствующем разделе.

Автор: sanek1990 13.11.2009, 11:57
Цитата(bsa @ 13.11.2009,  11:43)
sanek1990, твой код к С++ отношения не имеет. Это C++/CLI он же .NET (похожее название - уловка маркетологов). Поэтому вопросы надо размещать в соответствующем разделе.

Спасибо за подсказку, буду теперь знать! smile 

Автор: mes 13.11.2009, 13:09
Цитата(sanek1990 @  13.11.2009,  09:35 Найти цитируемый пост)
Листинг Form2
Код

namespace Forms {


тогда
Код

// Form2 ^newDlg = gcnew Form2();
Forms::Form2 ^newDlg = gcnew Forms::Form2();

Автор: sanek1990 13.11.2009, 13:36
Цитата(mes @ 13.11.2009,  13:09)
Цитата(sanek1990 @  13.11.2009,  09:35 Найти цитируемый пост)
Листинг Form2
Код

namespace Forms {


тогда
Код

// Form2 ^newDlg = gcnew Form2();
Forms::Form2 ^newDlg = gcnew Forms::Form2();

Спасибо, теперь все заработало. я так понял что надо было обращаться к пространству Forms, чтобы через него вызвать Form2, и затем тоже самое сделать с Form3. Вопрос решен. smile 

Автор: mes 13.11.2009, 13:45
Цитата(sanek1990 @  13.11.2009,  12:36 Найти цитируемый пост)
я так понял что надо было обращаться к пространству Forms, чтобы через него вызвать Form2

или использовать using для раскрытия пространства..

Автор: sanek1990 13.11.2009, 15:39
да попробовал использовать using, все отлично запустилось))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)