Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/56: Рейтинг темы: голосов - 56, средняя оценка - 4.89
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94

Вернуться с Form2 на Form1

21.01.2010, 09:01. Показов 11241. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как из формы перейти в предыдущую на С++. То есть на первой форме есть кнопа которая скрывает ее (Hide) и запускает вторую. Как сделать кнопку назад, то есть тоже самое, но в обратном порядке. Здесь получается, что вторая форма как бы дочерняя от первой и у же нельзя вставить во вторую "include"
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2010, 09:01
Ответы с готовыми решениями:

Код для Form1 в Form2
У меня в Windows Form Application есть две формы: Form1 и Form2. Я хочу, чтобы код, написанный в Form2 работал для Form1. Как это можно...

Обратная связь Form2 к Form1
код Form1 в котором у нас по нажатию на button открывается Form2(Form1 остается открытым) Вот у на Form2. как обращаться...

По нажатию кнопки в Form2 изменения в Form1
Здравствуйте Столкнулся с проблемой не знаю как сделать так чтобы при нажатии кнопки в Form2 били изменения в Form1 Точнее В...

18
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
21.01.2010, 11:58
Цитата Сообщение от delong Посмотреть сообщение
Подскажите как из формы перейти в предыдущую на С++. То есть на первой форме есть кнопа которая скрывает ее (Hide) и запускает вторую. Как сделать кнопку назад, то есть тоже самое, но в обратном порядке. Здесь получается, что вторая форма как бы дочерняя от первой и у же нельзя вставить во вторую "include"
Зачем две формы, если первая скрывается? Сделай все на одной форме (либо две панели, либо tabControl)
0
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94
21.01.2010, 12:00  [ТС]
неа... нудно две
1
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
21.01.2010, 15:15
delong, тогда я не пойму..
Если вы скроете главную форму - то у вас и второсепенная то пропадет.
0
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94
21.01.2010, 15:44  [ТС]
нет, на первой форме в обработчике кнопки пишу:
C++
1
2
3
Form2^ f2= gcnew Form2();
f2->Show();
this->Hide();
...тут она скрывается(не закрывается) и появляется Form2.
Вот и нужно как-нибудь эту Form2 закрыть, например использовать
C++
1
this->Close();
и открыть предыдущую Form1 , как?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
21.01.2010, 21:01
delong, поиграй с флажками и DialogResult
0
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94
21.01.2010, 21:12  [ТС]
Какие флажки?
1
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
22.01.2010, 08:57
Цитата Сообщение от delong Посмотреть сообщение
нет, на первой форме в обработчике кнопки пишу:
C++
1
2
3
Form2^ f2= gcnew Form2();
f2->Show();
this->Hide();
...тут она скрывается(не закрывается) и появляется Form2.
Вот и нужно как-нибудь эту Form2 закрыть, например использовать
C++
1
this->Close();
и открыть предыдущую Form1 , как?
Когда ты ее хочешь закрыть? Напиши внятно, что тебе конкретно нужно... А то пишешь надо что то скрыть потом закрыть, а потом показать? Что скрыть, что закрыть???
0
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94
22.01.2010, 14:51  [ТС]
Да нормально все я объяснил: на первой форме есть кнопка, которая скрывает ее и открывает вторую(использую this-Hide(); в обработчике события кнопки)-нажимаешь на кнопку: 1я скрывается, показывается 2я. На вторую кнопку нужно поставить другую кнопку(назад), которая бы закрывала (или опять же скрывала) 2ю форму и открывала 1ю форму. Почему я говорил про this->Close();, потомучто это событие не закрывает само приложение, а закрывает только форму.
1
Заблокирован
22.01.2010, 21:16
В первой
C#
1
2
3
           this.Hide();
            Form2 F2 = new Form2();
            F2.Show();
Во второй
C#
1
2
3
             this.Close();
            Form1 F1 = new Form1();
            F1.Show();
0
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94
22.01.2010, 22:20  [ТС]
ты говоришь все логично, но что бы например из первой открыть вторую ее нужно включить туда, то есть в первую форму мы вставляем еще
C++
1
#include "Form2.h"
, а во вторую не могу включить
C++
1
#include "Form1.h"
, если включаю, то пишет ошибки - неверный индефикатор Form1, Form2 и .т.д, пробовал также включать
в сам файл Form2.cpp, нечего не получается....
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
22.01.2010, 22:25

Не по теме:

закрывающейся кавычки нет?



Добавлено через 3 минуты
delong, на с++cli давно не писал, но он вроде требует разделять объявление функций и их тело. Раздели их и все должно быть нормально
0
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94
22.01.2010, 22:28  [ТС]
Цитата Сообщение от delong Посмотреть сообщение
... показывается 2я. На вторую ФОРМУ нужно поставить ...
опечатка
0
1 / 1 / 0
Регистрация: 15.01.2010
Сообщений: 4
24.01.2010, 12:19
Цитата Сообщение от ssv_www Посмотреть сообщение
C++
1
2
3
            this.Close();
            Form1 F1 = new Form1();
            F1.Show();
не катит. так ты создашь ещё 1 новый экземпляр Form1. Тебе нужно в конструктор Form2 передавать указатель на Form1.
На СиШарпе я бы сделал так:
C#
1
2
3
4
5
6
//в конструкторе пишу
public Form2(Form1 F)
{
          F1 = F;
          //F1 - глобальная переменная, ссылка как раз на 1ю форму
}
соответственно, там где вызываешь 2ю форму, пропиши
C#
1
Form2 F2 = new Form2(this);
и чтоб показать 1ю
C#
1
2
this.close();
F1.show();
а чтоб это всё работало в С++ тебе нужно только расставить звёздочки и апперсенты)
P.S. без глобальных переменных боюсь, не обойтись. Но указатель весит 4 байта, так что не страшно)
0
Заблокирован
25.01.2010, 11:01
Цитата Сообщение от Obratim Посмотреть сообщение
не катит. так ты создашь ещё 1 новый экземпляр Form1. Тебе нужно в конструктор Form2 передавать указатель на Form1.
На СиШарпе я бы сделал так:
[CSHARP]//в конструкторе пишу
public Form2(Form1 F)
{
F1 = F;
//F1 - глобальная переменная, ссылка как раз на 1ю форму
}
Ошибка 1 Элемент "F1" не существует в текущем контексте.
1
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94
25.01.2010, 16:04  [ТС]
вот где то нашел , но у меня не пашет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
You can include these header files in one .cpp file, and it will not cause cross-included issue. For example, we can declare button_click event in both Form1.h and Form2.h. And implement these method in Form2.cpp, please refer to following code:
 
 
//Form2.cpp<br/><br/>#include "StdAfx.h"
#include "Form1.h"
#include "Form2.h"
 
System::Void CppWinform::Form2::button1_Click(System::Object^  sender, System::EventArgs^  e)
{
 Form1^ frm1 = gcnew Form1();
 frm1->Show();
 this->Hide();
}
 
System::Void CppWinform::Form1::button1_Click(System::Object^  sender, System::EventArgs^  e) {
 Form2^ frm2 = gcnew Form2();
 frm2->Show();
this->Hide();                
}
(((
0
1 / 1 / 0
Регистрация: 15.01.2010
Сообщений: 4
28.01.2010, 01:24
Цитата Сообщение от ssv_www Посмотреть сообщение
Ошибка 1 Элемент "F1" не существует в текущем контексте.
ну естественно! ты сам должен создать переменную F1 типа Form1.
Вот что нужно написать в классе 2й формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public partial class Form2 : Form
    {
        Form1 f1;//создаём глобальную переменную-указатель на 1ю форму
        public Form2(Form1 f)//вот сдесь, в конструкторе прописываем входящую переменную-
                                     //указатель на 1ю форму
        {
            InitializeComponent();
            f1 = f;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            f1.Show();
            this.Close();//закрываем 2ю форму и показываем 1ю
        }
    }
и в 1й по onClick соответственно написать:
C#
1
2
3
4
5
6
7
private void button1_Click(object sender, EventArgs e)
        {
            Form2 F = new Form2(this);
                    //создаём 2ю форму и отправляем ей this - указатель на 1ю
            F.Show();
            this.Hide();
        }
на С++ логика такая-же, синтаксис похож, только вот эти вот значки '^' нада в правильных местах порасставлять.
я и сам пытался но чёт мозгов не хватило обойти ошибки неправельных идентификаторов.

Через gcnew показывать 1ю форму нельзя. Иначе ты будешь не прятать и показывать оду и туже 1ю форму, а создавать бесконечно много объектов типа Form1.
1
Заблокирован
28.01.2010, 08:53
Цитата Сообщение от Obratim Посмотреть сообщение
ну естественно! ты сам должен создать переменную F1 типа Form1.
OK. Согласен.
0
24 / 24 / 2
Регистрация: 27.11.2009
Сообщений: 94
29.01.2010, 00:41  [ТС]
спасибо.решение нашел проще:
Form1:
C++
1
2
3
4
5
6
7
8
9
#include "Form2.h"
//.......
//.......
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 Form2 ^frm2 = gcnew Form2(); 
                frm2->Owner=this; 
                frm2->Show(); 
                this->Hide();
             }
Form2:
C++
1
2
3
4
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                  Owner->Show();
                  this->Close();
             }
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2010, 00:41
Помогаю со студенческими работами здесь

Создать кнопку на Form2 в Load Form1
В стандартном проекте WF в Form1_Load создаем новый Form2 private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ ...

как перенести из Form1 результат в Form2 в textbox?
вот отрывок кода!как сделать чтобы переменная С в Form1 отображалась в Form2 в textBox ? System::Windows::Forms::DialogResult dr; ...

Как перенести число из Form2->TextBox в Form1->DataGridView?
В меня есть Form1, по нажатию на кнопку открывается Form2. В Form1 находится datagridview1, в Form2 есть textbox1. В textbox1 находится...

Как написать функцию для Буттон1(Которая распол. на Form2) что бы возвращалась к Form1 от Form2
Коллеги подскажите как написать такю кнопку=)) Пробовал oid __fastcall TForm2::Button1Click(TObject *Sender) { Form1-&gt;ShowModal(); ...

Через Form1 открывают Form2 там открывается Form3 которая меняет данные в Form1. Но они не меняются
В первой форме Main по нажатию кнопки вызываю другую форму private void Button_AddVetrina(object sender, EventArgs e) { ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
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