Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
 
MoonRaiser
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
1

Почему одна форма не видит другую?

28.05.2017, 17:03. Просмотров 403. Ответов 8
Метки нет (Все метки)

Собственно faq "как создать вторую форму" читал, главная форма не видит другие, хотя они её видят, include естественно прописан
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2017, 17:03
Ответы с готовыми решениями:

Одна сеть не видит другую (PPTP между двумя офисами)
Добрый день. Поднял pptp сервер на микротике RB2011UiAS-2HnD-IN. Создал пользователя который...

Как сделать так, чтобы при нажатии на кнопку менялась одна форма на другую?
Я вот пытаюсь разработать тест и столкнулась с такой проблемой, как смена формы на другую... В...

Почему работает только одна форма из двух?
Помогите, пожалуйста, сам я в javascript понимаю слабо. Сделал две аналогичных формы, запускаемых...

VMware workstation 10 видит только одна ядро. Почему?
Здравствуйте. На компе вин7х64, такую же ставил и на vmware 10, в настройках виртуальной машины...

Почему при одинаковых ситуациях одна и та же форма видится нормально или вообще не инициализируется в другой
Вот код using System; using System.Collections.Generic; using System.ComponentModel; using...

8
OwenGlendower
Супер-модератор
Эксперт .NET
11453 / 9648 / 4055
Регистрация: 17.03.2014
Сообщений: 19,265
Записей в блоге: 1
Завершенные тесты: 2
28.05.2017, 17:41 2
MoonRaiser, так как ты не описал что именно значит "не видит", то предположу что это происходит из-за циклических include-ов. Проблема решается выноса кода в cpp файл.
0
MoonRaiser
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
28.05.2017, 18:32  [ТС] 3
OwenGlendower, циклических? Так я прописывал сначала только один в основной форме, но это ничего не дало.

Добавлено через 4 минуты
Попробовал вынести в cpp, основная форма всё равно не видит другие, а наоборот работает
0
OwenGlendower
Супер-модератор
Эксперт .NET
11453 / 9648 / 4055
Регистрация: 17.03.2014
Сообщений: 19,265
Записей в блоге: 1
Завершенные тесты: 2
28.05.2017, 18:58 4
MoonRaiser, циклических, да. Form1.h включает Form2.h который включает Form1.h. Так делать нельзя. Нужно вынести код который работает с другой формой в cpp файл и делать include там. Но возможно у тебя что-то другое. Ты же так и не пояснил что значит "не видит".
0
28.05.2017, 18:58
MoonRaiser
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
31.05.2017, 18:53  [ТС] 5
OwenGlendower, допустим добавляю в cpp файл основной формы
C++
1
#include "FormAbout.h"
, и далее в этой же форме прописываю
C++
1
FormAbout^ f2 = gcnew FormAbout();
Что соответственно и вызывает ошибки
Код
1>c:\source\repos\test\проект windows form1\проект windows form1\MainForm.h(524): error C2065: FormAbout: необъявленный идентификатор
1>c:\source\repos\test\проект windows form1\проект windows form1\MainForm.h(524): error C2065: f2: необъявленный идентификатор
1>c:\source\repos\test\проект windows form1\проект windows form1\MainForm.h(524): error C2061: синтаксическая ошибка: идентификатор "FormAbout"
0
OwenGlendower
Супер-модератор
Эксперт .NET
11453 / 9648 / 4055
Регистрация: 17.03.2014
Сообщений: 19,265
Записей в блоге: 1
Завершенные тесты: 2
31.05.2017, 19:22 6
MoonRaiser, код тоже нужно вынести в cpp файл. Необходимо сделать два действия - 1) добавить #include в cpp файл и 2) вынести код код работы в другой формой в него. У тебя же судя по ошибке код все еще в h файле.

Предположим что форма FormAbout открывается по нажатию кнопки. Тогда в MainForm.h нужно оставить только объявление обработчика событий.
C++
1
System::Void button1_Click(System::Object^  sender, System::EventArgs^  e);
#include "AboutForm.h" в файле MainForm.h не нужно писать.

В MainForm.cpp выносим реализацию метода button1_Click
C++
1
2
3
4
5
6
7
8
9
10
#include "stdafx.h"
#include "MainForm.h"
#include "AboutForm.h"
 
namespace Название_Пространства_Имен {
    System::Void MainForm::button1_Click(System::Object^  sender, System::EventArgs^  e) {
        FormAbout^ f2 = gcnew FormAbout();
        // ...
    }
}
Вместо Название_Пространства_Имен подставь название своего пространства имен. Теперь код должен компилироваться и работать. Таким образом поступаем всегда когда есть циклическая зависимость между формами (или точнее между разными типами). Следует иметь в виду что дизайнер VS не поддерживает такое разделение и поэтому переход по двойному щелчку из дизайнера в коде работать для таких методов не будет. Нужно будет использовать другие средства навигации по коду.

P.S. Если не хочется бороться с такими исскуственными трудностями, то советую переходить на C#. We have cookies!™
1
MoonRaiser
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
31.05.2017, 19:36  [ТС] 7
OwenGlendower,
C++
1
2
3
4
5
6
7
8
9
10
11
#include "FormAbout.h"
#include "MainForm.h"
 
...
 
namespace Проект_Windows_Form1 {
    System::Void MainForm::button1_Click(System::Object^  sender, System::EventArgs^  e) {
        FormAbout^ f2 = gcnew FormAbout();
        // ...
    }
}
И при сборке ошибка MyForm.cpp(17): error C2653: MainForm: не является именем класса или пространства имен
Хоть вторая форма теперь обрабатывается
0
OwenGlendower
Супер-модератор
Эксперт .NET
11453 / 9648 / 4055
Регистрация: 17.03.2014
Сообщений: 19,265
Записей в блоге: 1
Завершенные тесты: 2
31.05.2017, 19:39 8
MoonRaiser, класс формы точно называется MainForm? Может MyForm?
0
MoonRaiser
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
31.05.2017, 20:17  [ТС] 9
OwenGlendower, ошибка была в том, что я разное пространство имен для двух форм использовал
0
31.05.2017, 20:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2017, 20:17

Форма передает данные, скрипт видит переменные, но не видит их значение
Доброго времени суток всем! У меня проблема, если не трудно- помогите plz! Форма передает данные,...

Хром 56.0.2924.87 не видит табл.стилей а Лиса 4.0 Видит, почему?
Хром 56.0.2924.87 не видит табл.стилей а Лиса 4.0 Видит, почему? И как сделать, чтобы Хром видел?...

Одна программа вызывает другую
Как это сделать? Напишите две программы. Первая должна суммировать два введённых из входного...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.