Проблема заключается в том что класс дочерней формы никак не хочет видеть класс родительской,
и к родительской форме из дочерней доступа нет.
На С# без всяких проблем, но очень нужно на С++.net
На форме Form1 есть кнопка showDaughter, событие кнопки Click обрабатывается в showDaughterFormButton_Click.
Если тоже самое переводить на С++.NET то
при обращении к свойству:
Form1^ owner = (Form1^)this->Owner;
компиляятор ругается что нет такого типа как Form1^.
Переведите этот код ,пожалуйста,

на C++.net
//////////////Файл Form1.cs - родительский класс///////////////
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace test_form
{
public partial class Form1 : Form
{
private int someVariable;
public int SomeVariable
{
get{return someVariable;}
}
public Form1()
{InitializeComponent();}
private void showDaughterFormButton_Click(object sender, EventArgs e)
{
Daughter form = new Daughter();form.Show(this);
}
}
}
///////////////////////////////////////Файл Daughter.cs////////////////////////////
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace test_form
{
public partial class Daughter : Form
{
public Daughter()
{InitializeComponent();}
private void Daughter_Load(object sender, EventArgs e)
{
Form1 owner = (Form1)this.Owner;
int a = owner.SomeVariable;
}
}
}
Оба файла находятся в одном проекте test_form
(на всякий прекрепил проект
http://www.rsdn.ru:80/File/65124/test_form.rar на C# )
Здравствуйте, winPerec, Вы писали:
P>Переведите этот код ,пожалуйста,
на C++.net
P>Оба файла находятся в одном проекте test_form
public __gc class Form1 : public Form
{
// Methods
public: Form1()
{
this->InitializeComponent();
}
private: void __gc* showDaughterFormButton_Click(Object __gc* sender, EventArgs __gc* e)
{
__gc new Daughter()->Show(this);
}
// Properties
public: __property Int32 __gc* get_SomeVariable()
{
return this->someVariable;
}
// Fields
private: Int32 __gc* someVariable;
}
public __gc class Daughter : public Form
{
// Methods
public: Daughter()
{
this->InitializeComponent();
}
private: void __gc* Daughter_Load(Object __gc* sender, EventArgs __gc* e)
{
Form1 __gc* owner = *static_cast<__box Form1*>(base->Owner);
Int32 __gc* someVariable = owner->SomeVariable;
}
};
Сконверчено Reflector'ом
Судя по __gc это oldSyntax, насколько я помню в новом синтаксисе, вместо
__gc нужно использовать
ref, при этом для указателей вместо
Form1 __gc* нужно заменить на просто
Form1 . может по памяти напутал, но вроде так, если что, то в MSDN по поводу перехода oldSyntax->newSyntax раздел соответствующий есть
... << RSDN@Home 1.2.0 alpha rev. 676>>
вроде вспомнил — для указателей на менеджед объекты нужно не
Form1 __gc* заменять написать на
Form1 ^, вобщем думаю разбересся

... << RSDN@Home 1.2.0 alpha rev. 676>>
Здравствуйте, _Morpheus_, Вы писали:
Вы писали:
P>>Переведите этот код ,пожалуйста,
на C++.net
P>>Оба файла находятся в одном проекте test_form
_M_>_M_>public __gc class Form1 : public Form
_M_>{
_M_> // Methods
_M_> public: Form1()
_M_> {
this->>InitializeComponent();
_M_> }
_M_> private: void __gc* showDaughterFormButton_Click(Object __gc* sender, EventArgs __gc* e)
_M_> {
_M_> __gc new Daughter()->Show(this);
_M_> }
_M_> // Properties
_M_> public: __property Int32 __gc* get_SomeVariable()
_M_> {
_M_> return this->someVariable;
_M_> }
_M_> // Fields
_M_> private: Int32 __gc* someVariable;
_M_>}
_M_>
_M_>_M_>public __gc class Daughter : public Form
_M_>{
_M_> // Methods
_M_> public: Daughter()
_M_> {
this->>InitializeComponent();
_M_> }
_M_> private: void __gc* Daughter_Load(Object __gc* sender, EventArgs __gc* e)
_M_> {
_M_> Form1 __gc* owner = *static_cast<__box Form1*>(base->Owner);
_M_> Int32 __gc* someVariable = owner->SomeVariable;
_M_> }
_M_>};
_M_>
_M_>Сконверчено Reflector'ом
Но тут дело не в синтаксисе. Эти два файла находятся в одном нейспесе, причем в файле родительской формы Form1
подключается файл дочерней, далее создается ее обЪект и она показывается:
__gc new Daughter()->Show(this);
В файле дочерней формы Daughter возвращается обЪект родительской формы:
private: void __gc* Daughter_Load(Object __gc* sender, EventArgs __gc* e)
_M_> {
_M_> Form1 __gc* owner = *static_cast<__box Form1*>(base->Owner);
_M_> Int32 __gc* someVariable = owner->SomeVariable;
_M_> }
Вот здесь и возникает проблема: тип Form1^ не известен в классе Daughter.
Если попробывать подключить его:
#include"Form1.h"
public __gc class Daughter : public Form
{
//......
//......
//......
}
то возникают ошибки в классе родительской формы.
Если сделать так:
ref class Form1;
public __gc class Daughter : public Form
{
// Methods
public: Daughter()
{
this->>InitializeComponent();
}
private: void __gc* Daughter_Load(Object __gc* sender, EventArgs __gc* e)
{
Form1 __gc* owner = *static_cast<__box Form1*>(base->Owner);
//То здесь error C2027: use of undefined type 'TESTFORM2::Form1'
Int32 __gc* someVariable = owner->SomeVariable;
}
};
Прекреплю проект на С++.net в котором возникают такие ошибки,
чтобы было понятней о чем идет речь.
http://www.rsdn.ru:80/File/65124/TESTFORM2.rar
а вот как от них избавиться я не знаю
Если знаешь как решить эту проблему, please send answer...Thanks