Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/47: Рейтинг темы: голосов - 47, средняя оценка - 4.85
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129

Переключиться с одной формы на другую

14.08.2015, 12:55. Показов 9416. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех, хотел сделать что то на подобии регистрации и авторизации на C++, но возникла проблема с переключением между форм... Т.е я никак не могу переключиться с одной формы на другую... Искал на форуме решения, для меня ничего не нашел...

Вот как я делаю:

C++
1
2
3
4
5
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 Form2 f = gcnew Form2();
                 f.ShowDialog();
                
             }
Но получаю следующую ошибку: error C3673: 'My123::Form2' : class does not have a copy-constructor

Надеюсь на вашу помощь...Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2015, 12:55
Ответы с готовыми решениями:

Не могу переключиться на другую форму
Дочернюю форму я вызываю следующим образом: Consultations cons = new Consultations (teacherID); cons.Owner = this; ...

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

Переключение с одной формы на другую
У меня есть 2 формы. Изначально при создании проекта была создана форма №2(в этой форме код программы).Форма №1 была создана позже,и она...

15
56 / 54 / 33
Регистрация: 05.11.2014
Сообщений: 259
14.08.2015, 13:14
По моему ты написал не в тот раздел, но может помогу:

C++
1
Form2 f = gcnew Form2();
Здесь оператор требует наличия конструктора копирования в классе Form2. Вот и добавь его:

C++
1
2
3
4
5
class Form2 {
  Form2::Form2(Form2^ form) { 
    *this = form;  // или как-то по другому
  }
}
0
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129
14.08.2015, 15:35  [ТС]
Спасибо что постарались помочь, но ошибки прибавились ...

Добавлено через 1 час 50 минут
По поводу класса всё верно, но как то по-другому его нужно создать...
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
14.08.2015, 16:05
Лучший ответ Сообщение было отмечено Harold как решение

Решение

Цитата Сообщение от Harold Посмотреть сообщение
C++
2
Form2 f = gcnew Form2();
C++
2
3
Form2^ f = gcnew Form2();
f->ShowDialog();
1
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129
14.08.2015, 16:24  [ТС]
Сума сойти, я ведь утром пробовал ->ShowDialog(); но чуть другим образом, перепробовал всё, но вот это не попробовал . Большое спасибо за помощь, заработало! )
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
14.08.2015, 16:29
Harold, и не только это. Ошибка была из-за того, что забыли приписать шапку (^) к имени типа.
0
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129
14.08.2015, 16:49  [ТС]
Понятно, спасибо за объяснения. Но столкнулся со следующей проблемой) К примеру во второй форме подключаю первую форму с помощью include "Form1.h" и как только я это делаю, при компиляции появляются ошибки, хочу чтоб со второй формы смог переключиться на первую, опять же, нажимая на кнопку.
C++
1
2
3
 Form1^ f1 = gcnew Form1();
                f1->Show();
                this->Hide();
Получаю ошибки...
C++
1
2
 'f1' : undeclared identifier
left of '->Show' must point to class/struct/union/generic type
и т.д...
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
14.08.2015, 16:55
Form1 в том же пространстве имён, что и форма, из которой вызывается этот код?
Попробуйте прописать полное имя, с пространством имён.
0
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129
14.08.2015, 17:18  [ТС]
Form1 в том же пространстве имён, что и форма, из которой вызывается этот код?
Я не точно понял в чём вопрос, но думаю да.

Попробуйте прописать полное имя, с пространством имён.
Честно говоря не понял как сделать

Добавлено через 17 минут
Если удалить переключение у одной формы и сделать только для второй, то работает отлично, а на обеих не хочет работать...

C++
1
2
3
4
5
6
'Form2' : undeclared identifier
'f2' : undeclared identifier
Form1' : undeclared identifier
'f1' : undeclared identifier
syntax error : identifier 'Form1'
syntax error : identifier 'Form2'
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
14.08.2015, 17:24
Пространство имён описывается почти в самом начале кода с ключевым словом namespace.
Обращение по полному имени: пусть класс Form1 находится в пр. имён MyNamespace
C++
1
MyNamespace::Form1^ form = gcnew MyNamespace::Form1();
Цитата Сообщение от Harold Посмотреть сообщение
а на обеих не хочет работать...
Покажите весь код метода.
0
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129
14.08.2015, 17:37  [ТС]
Первая форма.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#pragma once
#include "Form2.h"
namespace My123 {
 
    using namespace System;
    using namespace System::IO;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Summary for Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
 
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    protected: 
 
    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(38, 96);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(207, 66);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 262);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
 
        }
#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {  
            Form2^ f2 = gcnew Form2();
            f2->ShowDialog();
            //this->Hide();
                
 
             }
    };
}


Вторая форма.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#pragma once
#include "Form1.h"
namespace My12345 {
 
    using namespace System;
    using namespace System::IO;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Summary for Form2
    /// </summary>
    public ref class Form2 : public System::Windows::Forms::Form
    {
    public:
        Form2(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
 
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form2()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    protected: 
 
    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(68, 99);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(144, 52);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);
            // 
            // Form2
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 262);
            this->Controls->Add(this->button1);
            this->Name = L"Form2";
            this->Text = L"Form2";
            this->ResumeLayout(false);
 
        }
#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
        
                Form1^ f1 = gcnew Form1();
            f1->Show();
            //  this->Hide();
 
             }
    };
}
0
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129
01.10.2015, 15:23  [ТС]
Найдется человек, кто сможет помочь?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
03.10.2015, 13:46
Непросто заметить. Первая форма в пространстве имён My123, а вторая - My12345.
Желательно прийти к общему знаменателю. Назовите оба (там, где слово namespace) одинаково.
0
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129
03.10.2015, 19:40  [ТС]
Изначально имена пространств были одинаковыми, вы мне посоветовали сменить их, поставить разными, я так и сделал, но это не помогло, сейчас вернул в исходное положение. Дело в том, что к примеру если я в первой форме сделаю #include "Form2.h" и в первой форме сделаю по кнопке переход на вторую форму всё работает на отлично, но как только я делаю во второй форме #include "Form1.h" чтобы и в ней сделать переход, но уже на первую форму, то появляются ошибки:
Form2' : undeclared identifier
'f' : undeclared identifier
left of '->ShowDialog' must point to class/struct/union/generic type
syntax error : identifier 'Form2'

Я попробовал из первой формы, сделать два перехода, переход на вторую форму и третью, это тоже сработало отлично, но если ввести в третьей форме #include "Form1.h", то снова появляются ошибки.
Нельзя обойтись как то без include и так переходить с одной на другую ну или в чем ошибка не пойму...
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
05.10.2015, 16:03
Цитата Сообщение от Harold Посмотреть сообщение
вы мне посоветовали сменить их, поставить разными
Где это я такое советовал?
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Попробуйте прописать полное имя, с пространством имён.
Прописать полное имя, а не менять пространство имён.
Цитата Сообщение от Harold Посмотреть сообщение
обойтись как то без include и так переходить с одной на другую
C++
1
Application::OpenForms[L"Form1"]->Show();
2
0 / 0 / 0
Регистрация: 15.12.2018
Сообщений: 3
08.06.2022, 02:02
я тебя люблю, этим сообщением ты мне помог!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2022, 02:02
Помогаю со студенческими работами здесь

Переход с одной формы на другую
подскажите как зделаь переход с одной формы на другую методом нажатия на клавишу button

Информация с одной формы на другую
Столкнулся с такой проблемой, что нужно со второстепенной формы вывести число на главную(Число это очки так сказать)не знаю как это...

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

Переход с одной формы на другую
помогите пожалуйста! не могу разобраться! перехожу из 1-й формы на 2-ю, со 2-й на 3-ю, с 3-й на 4-ю и никак не могу перейти с 4-ой на...

Переход с одной формы на другую
Ребят, помогите кто чем может) Как открыть форму(2) по текущей записи другой формы(1). Чтобы в нужных полях формы(2) уже были...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru