Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в дочернем окне достучаться до родительского? Form2^ form2=gcnew Form2(this); 
:(
    Опции темы
unLIMIT1984
Дата 17.5.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.5.2009

Репутация: нет
Всего: нет



Ребят, привет.

С++ Windows Forms (VS2005)
Есть многооконное приложение.
Form1 - главное окно (IsMdiContainer=true).
Form2 - дочернее окно.
Необходимо при создании Form2 передать ссылку на Form1, чтобы в дочернем окне иметь доступ к членам родительского окна.

То, до чего дошел:
Код

//Form1.h
#include "Form2.h"
...
public ref class Form1 : public System::Windows::Forms::Form
{
public:
    Form1(void)
    {
         InitializeComponent();
         Form2^ form2=gcnew Form2(this);
         form2->MdiParent=this;
         form2->Show();
    }
public: System::Windows::Forms::Label^  label1;
...

Код

//Form2.h
...
ref class Form1;
public ref class Form2 : public System::Windows::Forms::Form
{
public:
    Form2(Form1^ prev)
    {
        InitializeComponent();
        mainWindow=prev;
        this->Text=mainWindow->label1->Text; //Заголовок дочернего окна = текст label1 родительского окна - ЗДЕСЬ ОШИБКА (30 строчка)
    }
public:    Form1^ mainWindow;
...

Ошибки возникают следующие:
                                                                                                                                                       Line
Error    1    error C2027: use of undefined type 'mdiApp::Form1'                                      Form2.h   30
Error    2    error C2227: left of '->label1' must point to class/struct/union/generic type  Form2.h   30
Error    3    error C2227: left of '->Text' must point to class/struct/union/generic type     Form2.h   30
Error    4    error C2027: use of undefined type 'mdiApp::Form1'                                      Form2.h   30
Error    5    error C2227: left of '->label1' must point to class/struct/union/generic type  Form2.h    30
Error    6    error C2227: left of '->Text' must point to class/struct/union/generic type     Form2.h    30

Помогите пожалуйста исправить ошибки.

PS: на всякий случай прикрепляю файлы проекта


Это сообщение отредактировал(а) unLIMIT1984 - 18.5.2009, 21:38

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  mdiApp.rar 13,27 Kb
PM MAIL   Вверх
Partizan
Дата 18.5.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



unLIMIT1984, файлы не прикрепились...

по сабжу - надо инклуд добавить в Form2.h:

#include "Form1.h"


Из сообщения компилятора же ясно видно, что он не может найти тип Form1


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
unLIMIT1984
Дата 18.5.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.5.2009

Репутация: нет
Всего: нет



Добавлял include - не помогает.
Прикрепил файл.

Это сообщение отредактировал(а) unLIMIT1984 - 18.5.2009, 21:39
PM MAIL   Вверх
Partizan
Дата 18.5.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Код

//Form2.h
#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 mdiApp {

    /// <summary>
    /// Summary for Form2
    ///
    /// WARNING: If you change the name of this class, you will need to change the
    ///          'Resource File Name' property for the managed resource compiler tool
    ///          associated with all .resx files this class depends on.  Otherwise,
    ///          the designers will not be able to interact properly with localized
    ///          resources associated with this form.
    /// </summary>
    ref class Form1;


    public ref class Form2 : public System::Windows::Forms::Form
    {
    public:
        Form2(Form1^ prev);

    protected:
        ~Form2()
        {
            if (components)
            {
                delete components;
            }
        }

    public:  Form1^ mainWindow;
    private: System::Windows::Forms::Label^  label1;

             System::ComponentModel::Container ^components;

#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->label1 = (gcnew System::Windows::Forms::Label());
            this->SuspendLayout();
            // 
            // label1
            // 
            this->label1->AutoSize = true;
            this->label1->Location = System::Drawing::Point(142, 96);
            this->label1->Name = L"label1";
            this->label1->Size = System::Drawing::Size(35, 13);
            this->label1->TabIndex = 0;
            this->label1->Text = L"label1";
            // 
            // Form2
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(343, 303);
            this->Controls->Add(this->label1);
            this->Name = L"Form2";
            this->Text = L"Form2";
            this->ResumeLayout(false);
            this->PerformLayout();

        }
#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 //this->Text=mainWindow->Text;
             }
    };
}



Код

//Form2.cpp
#include "StdAfx.h"
#include "Form2.h"
#include "Form1.h"

mdiApp::Form2::Form2(Form1^ prev)
{
    InitializeComponent();
    mainWindow=prev;
    this->Text=mainWindow->label1->Text;
}



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
unLIMIT1984
Дата 20.5.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.5.2009

Репутация: нет
Всего: нет



Partizan, здорово. Спасибо большое тебе. Подскажи пожалуйста, а почему реализацию этих функций нужно выносить в файл cpp? Например, все обработчики  вписываются в h-файл автоматически, а также обычные пользовательские функции нормально там живут.
PM MAIL   Вверх
Partizan
Дата 21.5.2009, 05:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



unLIMIT1984, MSDN говорит, что класс должен быть полностью определён в момент его использования.

Вообще, если говорить о C++, то хороший тон - в хедерах определять прототипы, а в cpp - реализацию.

Добавлено через 1 минуту и 12 секунд
unLIMIT1984, я к тому, что если бы не было перекрёстной зависимости, то всё бы было ок и в текущем варианте...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
MaksSh
Дата 22.5.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Всем привет
я использую С++ Windows Forms (VS2008)
у меня тоже многооконное приложение
разница в том что на второй форме есть button, при нажатии на которую я обращаюсь к объекту с первой формы

Код

//Form2.cpp
#include "StdAfx.h"
#include "Form2.h"
#include "Form1.h"

My_VeshicleEditor::FormCreateRevJount::FormCreateRevJount(Form1^ prev)
{
    InitializeComponent();
    mainWindow=prev;
}
System::Void My_VeshicleEditor::FormCreateRevJount::buttonCreatRevJount_Click(System::Object^  sender, System::EventArgs^  e) 
{
    mainWindow->render->createNewRevJount();
}

на что мне компилятор резонно отвечает
error C2039: buttonCreatRevJount_Click: не является членом "My_VeshicleEditor::FormCreateRevJount"
1>        e:\visual studio 9\my_editor\my_veshicleeditor\FormCreateRevJount.h(25): см. объявление 'My_VeshicleEditor::FormCreateRevJount'
1>e:\visual studio 9\my_editor\my_veshicleeditor\FormCreateRevJount.h(84) : error C2065: buttonCreatRevJount_Click: необъявленный идентификатор
1>e:\visual studio 9\my_editor\my_veshicleeditor\FormCreateRevJount.h(84) : error C3350: System::EventHandler: конструктор делегата ожидает 2 аргументов

а если функцию buttonCreatRevJount_Click реализовывать в нидере то 

error C2027: использование неопределенного типа "My_VeshicleEditor::Form1"
1>        e:\visual studio 9\my_editor\my_veshicleeditor\FormCreateRevJount.h(23): см. объявление 'My_VeshicleEditor::Form1'
1>e:\visual studio 9\my_editor\my_veshicleeditor\FormCreateRevJount.h(109) : error C2227: выражение слева от "->render" должно указывать на тип класса, структуры или объединения либо на универсальный тип
1>e:\visual studio 9\my_editor\my_veshicleeditor\FormCreateRevJount.h(109) : error C2227: выражение слева от "->createNewRevJount" должно указывать на тип класса, структуры или объединения либо на универсальный тип
1>FormCreateRevJount.cpp

прямо замкнутый круг какой то smile
PM MAIL WWW ICQ Skype   Вверх
Partizan
Дата 22.5.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



MaksSh, проект в студию


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
MaksSh
Дата 22.5.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Partizan
исходники, или просто в коде?
а то у меня проект большой smile

Добавлено через 3 минуты
я все сделал как описывалось выше
проблема только с функцией 
 
Код

buttonCreatRevJount_Click(System::Object^  sender, System::EventArgs^  e)


Добавлено через 4 минуты и 17 секунд
ой извиняюсь не тот код поставил надо С++ smile
PM MAIL WWW ICQ Skype   Вверх
MaksSh
Дата 22.5.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Вот пример создающий подобную ситуацию

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Primer.rar 7,45 Kb
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.