Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 72
1

Необъявленный идентификатор типа формы, а так же задача по обмену данными между формами

12.01.2019, 21:52. Показов 1333. Ответов 4

Author24 — интернет-сервис помощи студентам
Добрый день. Стоит задача разработки приложения на С++ с CLI Windows Forms, т.е. на формах. Делается это все в MS VS17.
Шаблон проекта CLI Windows Forms создавался по урокам на Ютубе, где показывают, как создать проект с формами на С++, т.к. в VS17 шаблон давно убрали.
Формы были успешно созданы, размещены объекты управления. Далее мне нужно будет создать несколько пользовательских классов, к переменным которых я должен иметь возможность обращаться из любой формы. Но на данном этапе я не могу даже просто передать значение из одного формы в другую.
Ранее в VS2010 использовал грубый метод с Extern, но сейчас от его использования должен отказаться, нужно что-то нормальное, что не будет нарушать правила ООП и т.д.
К сожалению, я еще достаточно слаб в программировании, поэтому гугление способов передачи данных между формами не принесли особого результата, т.к. часто народ приводит сразу код и небольшим объяснением и я попросту многого не понимаю в приведенных листингах, обычно достаточно громоздко, не получается уловить суть.
Пробовал делать нужные объекты на форме Паблик и в текстовом редакторе обращаться получалось, но сборка не проходила, т.к. выбивало ошибку Необъявленный идентификатор. Потом нашел еще способ обмена с помощью иерархии форм, родительская и дочерние. В текстовом редакторе без подчеркиваний указать и определить родителя удалось, а вот при сборке опять Необъявленный идентификатор.
Всю кучу кода приводить не буду, т.к. 80% там это авто-создание классов форм и описание свойств объектов на форме.

Привожу основные части кода.
GeneralForm.h(главная форма)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include "CreateGame.h"
 
...
 
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    CreateGame ^form2 = gcnew CreateGame();
    form2->Owner = this;
    this->Hide();
    form2->ShowDialog();
    this->Show();
}


GeneralForm.cpp(главная форма)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include "GeneralForm.h"
using namespace System;
 
[STAThreadAttribute]
 
int main()
{
    Windows::Forms::Application::EnableVisualStyles();
    Windows::Forms::Application::Run(gcnew KVK::GeneralForm());
    return 0;
}


CreateGame.h(вторая (дочерняя) форма)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
#pragma once
 
...
 
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    GeneralForm ^form1 = dynamic_cast <GeneralForm^> (this->Owner);
    form1->textBox1->Text = textBox1->Text;
}


CreateGame.срр(вторая (дочерняя) форма)
Кликните здесь для просмотра всего текста

C++
1
2
3
#include "stdafx.h"
#include "CreateGame.h"
#include "GeneralForm.h"


По итогу, код не подчеркивается, но при сборке вот это:
Кликните здесь для просмотра всего текста
Необъявленный идентификатор типа формы, а так же задача по обмену данными между формами
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2019, 21:52
Ответы с готовыми решениями:

Необъявленный идентификатор у формы
Работаю в Visual studio 2012. В начале файла Form1.h есть оператор #include &quot;Settings.h&quot; Место...

Необъявленный идентификатор при создании формы
Не могу вывести форму в VS2012. Создаю две формы (одна автоматом создаётся, form1, другую сам,...

Обмен данными между формами
Знаю, что тема ворошилась не один раз, но проблемма такая: (если уже где-то обсуждалась, пжл...

Обмен данными между формами
форма родитель имеет кнопку, при нажатии на которую создаётся ребёнок. у ребёнка есть picturebox и...

4
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 72
12.01.2019, 22:43  [ТС] 2
Вроде как вычитал, что один из выходов - реализация не в заголовочном, а в срр файле. Но перенеся туда обработчик столкнулся с тем, что не имею ссылку на объект класса формы. Не работает this и не видит объект textBox1.

C++
1
2
3
4
5
6
7
8
9
10
#include "stdafx.h"
#include "CreateGame.h"
#include "GeneralForm.h"
 
using namespace KVK;
 
System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    GeneralForm^ form1 = dynamic_cast <GeneralForm^> (this->Owner);
    form1->textBox1->Text = textBox1->Text;
}
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.01.2019, 00:01 3
ranko5445, для начала посмотрите вот эти ссылки:
Как сделать так, чтобы разные файлы могли видеть друг друга?
Ошибки при вызове форм - Syntax error
Как добавить кнопки на вторую форму?
Как открыть вторую форму?
1
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 72
13.01.2019, 00:13  [ТС] 4
IGPIGP, спасибо за то, что уделили время теме, но почти все указанные ссылки я читал, а одна из них как раз привела меня к Вам. Я сделал подключение форм, как было указано в темах, так же у меня частично работал вызов второй формы из первой при реализации в заголовочном файле. Но не работают реализации в заголовочном файле второй формы, когда обращаюсь к первой. Я думаю выход из ситуации - перенести реализации в срр файлы форм, но у меня проблема, что нет ссылки на форму, т.е. this и прочее не работает за пределами заголовочного файла, хотя в Вашем примере по одной из ссылок вы именно использовали this в срр файле формы и видимо у Вас почему-то это работает. Прикрепил файлы.
Вложения
Тип файла: rar KVK.rar (4.0 Кб, 0 просмотров)
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.01.2019, 01:01 5
Цитата Сообщение от ranko5445 Посмотреть сообщение
IGPIGP, спасибо за то, что уделили время теме, но почти все указанные ссылки я читал, а одна из них как раз привела меня к Вам. Я сделал подключение форм, как было указано в темах, так же у меня частично работал вызов второй формы из первой при реализации в заголовочном файле. Но не работают реализации в заголовочном файле второй формы, когда обращаюсь к первой. Я думаю выход из ситуации - перенести реализации в срр файлы форм, но у меня проблема, что нет ссылки на форму, т.е. this и прочее. Прикрепил файлы.
ranko5445, создание и взаимодействие двух объектов - system::windows::forms::form можно провести очень большим количеством вариантов и, это зависит от Вашей задачи. Например для организации простого диалога DialogBox есть специальный класс:
https://social.msdn.microsoft.... =vcgeneral
Если объекты нужны с доступом из разных событий то, нужно бы определять их ссылки на уровне полей формы, а не локально в событии (делегате button_click например).
Ну посмотрите идею асимметричного включения. Нельзя включить объекты симметрично (каждый в h-фал каждого). Тот кто содержит заголовочник в своём заголовочнике - получает доступ к интерфейсу включаемого объекта, а тот в свою очередь может включить своего визави только в реализацию - свой cpp-файл. То есть, возможности общения у данных объектов реализуются асимметрично, тоже. Например, тот объект, который имеет h-файл партнёра в своём заголовке, видит его код и может запустить его публичный метод вызванный по ссылке на данную форму. А ссылку он может сделать полем (и принять её в своём конструкторе, например) так как видит h фал этой формы. Это позволит обращаться к данной ссылке из любого метода.
ranko5445, я когда начинал окна связывать, ссылок на готовые решения в сети вообще было не найти. А положение усугублялось тем, что я ООП вообще не знал. Было весело. Но уверяю, при достаточном терпении, всё получится. Хотя почитать про шаблоны и наследование нужно бы параллельно.
Как вариант - возьмите какой-то пример и скомпилируйте. Посмотрите как он работает.
И вот ещё что. Точка входа (main) должна бы располагаться в своём файле. А cpp-шники форм - отдельно.
1
13.01.2019, 01:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2019, 01:01
Помогаю со студенческими работами здесь

Обмен данными между формами
Здравствуйте! Пишу в VS 2012. Есть две формы, по выборе чекбокса открывается вторая форма. Во...

Обмен данными между формами
Работаю в Visual Studio 2008, приложение Windows Forms. Есть две формы (Form1 и Form2). На Form2...

Обмен данными между формами
Добрый вечер. Пишу небольшое приложение средствами PyQt, хотел посоветоваться, как лучше...

Обмен данными между формами
Есть две формы, как организовать что бы из form2.edit1 данные переместились в переменную a из form1?

Обмен данными между формами
Нужно, что бы при вводе текста в textbox и при нажатии кнопки, менялось значения в lable другой...

Обмен данными между формами
Всем привет Имеется 2 открытые формы, необходимо при клике передать данный с 2 формы на 1, без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru