Объявите в Form2 скажем TextBox^ posilochka (public!)
В Form1 какй-то public: textBox11
После запуска Form2 child1 в Form1 напишите:
C++ |
1
| this->child1->posilochka=this->textBox11; |
|
теперь все что пишется в posilochka в Form2 попадает Form1 в textBox11.
Это "хулиганство", но, как говорится - дёшево и сердито!
//****************************************************//
Если хотите по-другому "правильнее" и сложнее вот ещё вариант:
Сделаем изменение текста в форме1 из формы2:
1) Имеются 2 формы - Form1 и Form2, на Form1 располагаются Button (button1, будет открывать вторую форму) и Label (label1, здесь будем менять текст). На Form2 - button1, по нажатию на которую будет происходить смена текста в label1.
2) Так как нам из первой формы нужно иметь доступ ко второй, а из второй к первой, то будет возникать проблема перекрестных ссылок (когда Form1.h ссылается на Form2.h, который в свою очередь опять ссылается на Form1.h). Для того, чтобы этого избежать, код первой формы (Form1), который будет иметь доступ ко второй форме (Form2) мы вынесем из h-файла в cpp файл.
Таким образом нужно создать файл Form1.cpp. (source files-> правая кнопка->создать)
3) Объявить открытый метод Set в Form1.h для того, чтобы можно было изменить текст label1:
C++ |
1
2
3
4
| public: void Set(String^ text)
{
label1->Text = text;
} |
|
4) В файле Form2.h подключаем Form1.h:
и создаем конструктор, который будет принимать и сохранять ссылку на первую форму для дальнейшего использования:
C++ |
1
2
3
4
5
| Form2(Form1^ parent)
{
InitializeComponent();
parentForm = parent;
} |
|
//...
C++ |
1
| private: Form1^ parentForm; |
|
По клику кнопки, будем вызывать метод Set родительской формы:
C++ |
1
2
3
| private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
parentForm->Set("hello from form2");
} |
|
5) Осталось в первой форме сделать открытие второй формы. Для этого из Form1.h обработчик нажатия кнопки переносим в Form1.cpp, а в h-файле оставляем только его объявление:
Form1.cpp:
C++ |
1
2
3
4
5
6
7
8
9
10
| #include "StdAfx.h"
#include "Form1.h"
#include "Form2.h"
namespace testApp {
System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2^ f2 = gcnew Form2(this);
f2->Show();
this->Hide();
}
} |
|
В Form1.h (#include "Form2.h" там не нужен, - не будет работать) вставляем только:
C++ |
1
| private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e); |
|
На этом все. Можно скомпилировать и проверить проект.
Еще можно посмотреть обсуждение на зарубежном форуме по этой же проблеме - Submitting Form2 and changing Form1 by it's value.
К сожалению ссылка потерялась но по Submitting Form2 and changing Form1 by it's value
Google выдаст Вам ссыдку на MSDN.
Вернуться к обсуждению:
Как из второго окна обратиться к элементам первого? C++/CLI WinForms