0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 72
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Необъявленный идентификатор типа формы, а так же задача по обмену данными между формами12.01.2019, 21:52. Показов 1333. Ответов 4
Добрый день. Стоит задача разработки приложения на С++ с CLI Windows Forms, т.е. на формах. Делается это все в MS VS17.
Шаблон проекта CLI Windows Forms создавался по урокам на Ютубе, где показывают, как создать проект с формами на С++, т.к. в VS17 шаблон давно убрали. Формы были успешно созданы, размещены объекты управления. Далее мне нужно будет создать несколько пользовательских классов, к переменным которых я должен иметь возможность обращаться из любой формы. Но на данном этапе я не могу даже просто передать значение из одного формы в другую. Ранее в VS2010 использовал грубый метод с Extern, но сейчас от его использования должен отказаться, нужно что-то нормальное, что не будет нарушать правила ООП и т.д. К сожалению, я еще достаточно слаб в программировании, поэтому гугление способов передачи данных между формами не принесли особого результата, т.к. часто народ приводит сразу код и небольшим объяснением и я попросту многого не понимаю в приведенных листингах, обычно достаточно громоздко, не получается уловить суть. Пробовал делать нужные объекты на форме Паблик и в текстовом редакторе обращаться получалось, но сборка не проходила, т.к. выбивало ошибку Необъявленный идентификатор. Потом нашел еще способ обмена с помощью иерархии форм, родительская и дочерние. В текстовом редакторе без подчеркиваний указать и определить родителя удалось, а вот при сборке опять Необъявленный идентификатор. Всю кучу кода приводить не буду, т.к. 80% там это авто-создание классов форм и описание свойств объектов на форме. Привожу основные части кода. GeneralForm.h(главная форма) Кликните здесь для просмотра всего текста
GeneralForm.cpp(главная форма) Кликните здесь для просмотра всего текста
CreateGame.h(вторая (дочерняя) форма) Кликните здесь для просмотра всего текста
CreateGame.срр(вторая (дочерняя) форма) Кликните здесь для просмотра всего текста
По итогу, код не подчеркивается, но при сборке вот это:
0
|
12.01.2019, 21:52 | |
Ответы с готовыми решениями:
4
Необъявленный идентификатор у формы Необъявленный идентификатор при создании формы Обмен данными между формами Обмен данными между формами |
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 72
|
||||||
12.01.2019, 22:43 [ТС] | 2 | |||||
Вроде как вычитал, что один из выходов - реализация не в заголовочном, а в срр файле. Но перенеся туда обработчик столкнулся с тем, что не имею ссылку на объект класса формы. Не работает this и не видит объект textBox1.
0
|
Комп_Оратор)
|
|
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 в срр файле формы и видимо у Вас почему-то это работает. Прикрепил файлы.
0
|
Комп_Оратор)
|
|
13.01.2019, 01:01 | 5 |
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 | |
13.01.2019, 01:01 | |
Помогаю со студенческими работами здесь
5
Обмен данными между формами Обмен данными между формами Обмен данными между формами Обмен данными между формами Обмен данными между формами Обмен данными между формами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |