|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.04.2009, 14:08 | #1 |
Регистрация: 12.04.2009
Сообщений: 4
|
2 Класса
Тип проекта CLR
Коротко опишу суть проблемы, заранее прошу не посылать в гуглы и тп ибо рою второй день ничего по теме не нашел(хотя мб не умею искать): Допустим есть 2 класса наследующих класс формы: Form1 и Form2 По некоторому событию в 1й форме происходит создание и открытие второй формы: Form2 ^frm2=gcnew Form2; frm2->Show(); Все ок, ибо формы 1 включена в проект после инклуда 2й формы, т.е. тип Form2 видим. Теперь мне нужно из формы2 вызвать любую функцию из формы1. Тут начинаются проблемы, так как чтобы что-то вызывать у экземпляра формы1 нужно чтобы 2я форма получила указатель на этот экземпляр, передать указатель не проблема, проблема в том что форма 2 не видит такого типа как Form1, т.е. работа с указателем не возможна. Как быть в данной ситуации? банальный пример применения: в основном окне открываем доп форму, вбиваем там данные и по кнопке ОК возвращаем их в 1ю форму. Подскажите пожалуйста где я ошибаюсь и варианты реализации вызова функции Заранее спасибо |
12.04.2009, 17:21 | #2 |
Пользователь
Регистрация: 26.03.2009
Сообщений: 43
|
ну как я понял нужно лишь у форм 2 подправить конструктор , т.е. включить туда параметр form , и сделать поле в классе форм2 - форм2
и потом просто присоздании экземпляра форм2 укажешь (this) поидее так, если я правильно понял вообще как бы это было на С# Код:
|
14.04.2009, 09:09 | #3 |
Регистрация: 12.04.2009
Сообщений: 4
|
да, правильно, только проблема в том что у форм1 компиль не видит функций класса форм1, а только базового класса форм, проблема именно в вызове из формы1 нестандартных(не пронаследованных) функций и свойств
|
14.04.2009, 13:41 | #4 |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
form 2
Код:
|
14.04.2009, 20:59 | #5 |
Регистрация: 12.04.2009
Сообщений: 4
|
Как я говорил тип проекта ЦЛР, т.е. там каждая форма отдельный класс в отдельном файлике. в stdafx прописаны инклуды этих файликов
если у нас идет #include "Form2.h" #include "Form1.h" то как видно форма 1 описана после и форма 2 не в курсе что есть такой класс как form1, если же написать наоборот, форм 1 не сможет создавать форм 2... |
14.04.2009, 22:19 | #6 |
Пользователь
Регистрация: 26.03.2009
Сообщений: 43
|
ну просто тут шарп художники)) выкладывай весь солюшен че нить придумаем :D
|
15.04.2009, 17:43 | #7 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
Да вы подключайте хедеры в Form1.h и в Form2.h необязательно все подключать через stdafx.h
|
15.04.2009, 21:55 | #8 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Так все равно получается циклическая ссылка.
Вот если определение функции вручную вынести в .cpp, то можно использовать класс Form1 из Form2 и наоборот: Код:
Вопрос знатокам C++. Насколько корректно такое решение ? Почему в проектах CLR студия и объявление и определение метода помещает в заголовочные файлы ? Это как то связано с особенностями NET ? |
30.04.2009, 10:49 | #9 |
Регистрация: 30.04.2009
Сообщений: 7
|
Скорее, особенности C++.NET ... :-/
А если честно, то MaTBeu прав: подключайте хэдеры не в stdafx, а в каждой форме отдельно. Причём только те, которые нужны.
[Nosce te ipsum]
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ссылка класса. | Scratch | Общие вопросы C/C++ | 21 | 01.10.2008 16:21 |
Создание класса | Манжосов Денис :) | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 3 | 31.05.2008 11:54 |
Создание класса | Stanislav | Общие вопросы Delphi | 8 | 15.05.2008 23:34 |
создание класса | Siren | Помощь студентам | 1 | 07.05.2008 19:19 |
Создания Класса | Mickle | Общие вопросы Delphi | 1 | 30.04.2007 00:44 |