0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 72

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

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

Студворк — интернет-сервис помощи студентам
Добрый день. Стоит задача разработки приложения на С++ с 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.01.2019, 21:52
Ответы с готовыми решениями:

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

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

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

4
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 72
12.01.2019, 22:43  [ТС]
Вроде как вычитал, что один из выходов - реализация не в заголовочном, а в срр файле. Но перенеся туда обработчик столкнулся с тем, что не имею ссылку на объект класса формы. Не работает 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
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.01.2019, 00:01
ranko5445, для начала посмотрите вот эти ссылки:
Как сделать так, чтобы разные файлы могли видеть друг друга?
Ошибки при вызове форм - Syntax error
Как добавить кнопки на вторую форму?
Как открыть вторую форму?
1
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 72
13.01.2019, 00:13  [ТС]
IGPIGP, спасибо за то, что уделили время теме, но почти все указанные ссылки я читал, а одна из них как раз привела меня к Вам. Я сделал подключение форм, как было указано в темах, так же у меня частично работал вызов второй формы из первой при реализации в заголовочном файле. Но не работают реализации в заголовочном файле второй формы, когда обращаюсь к первой. Я думаю выход из ситуации - перенести реализации в срр файлы форм, но у меня проблема, что нет ссылки на форму, т.е. this и прочее не работает за пределами заголовочного файла, хотя в Вашем примере по одной из ссылок вы именно использовали this в срр файле формы и видимо у Вас почему-то это работает. Прикрепил файлы.
Вложения
Тип файла: rar KVK.rar (4.0 Кб, 0 просмотров)
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.01.2019, 01:01
Цитата Сообщение от ranko5445 Посмотреть сообщение
IGPIGP, спасибо за то, что уделили время теме, но почти все указанные ссылки я читал, а одна из них как раз привела меня к Вам. Я сделал подключение форм, как было указано в темах, так же у меня частично работал вызов второй формы из первой при реализации в заголовочном файле. Но не работают реализации в заголовочном файле второй формы, когда обращаюсь к первой. Я думаю выход из ситуации - перенести реализации в срр файлы форм, но у меня проблема, что нет ссылки на форму, т.е. this и прочее. Прикрепил файлы.
ranko5445, создание и взаимодействие двух объектов - system::windows::forms::form можно провести очень большим количеством вариантов и, это зависит от Вашей задачи. Например для организации простого диалога DialogBox есть специальный класс:
https://social.msdn.microsoft.... =vcgeneral
Если объекты нужны с доступом из разных событий то, нужно бы определять их ссылки на уровне полей формы, а не локально в событии (делегате button_click например).
Ну посмотрите идею асимметричного включения. Нельзя включить объекты симметрично (каждый в h-фал каждого). Тот кто содержит заголовочник в своём заголовочнике - получает доступ к интерфейсу включаемого объекта, а тот в свою очередь может включить своего визави только в реализацию - свой cpp-файл. То есть, возможности общения у данных объектов реализуются асимметрично, тоже. Например, тот объект, который имеет h-файл партнёра в своём заголовке, видит его код и может запустить его публичный метод вызванный по ссылке на данную форму. А ссылку он может сделать полем (и принять её в своём конструкторе, например) так как видит h фал этой формы. Это позволит обращаться к данной ссылке из любого метода.
ranko5445, я когда начинал окна связывать, ссылок на готовые решения в сети вообще было не найти. А положение усугублялось тем, что я ООП вообще не знал. Было весело. Но уверяю, при достаточном терпении, всё получится. Хотя почитать про шаблоны и наследование нужно бы параллельно.
Как вариант - возьмите какой-то пример и скомпилируйте. Посмотрите как он работает.
И вот ещё что. Точка входа (main) должна бы располагаться в своём файле. А cpp-шники форм - отдельно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.01.2019, 01:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru