//открываю 2-ую форму в Form1.h:
private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e){
Form2^ f2 = gcnew Form2();
f2->Show();
}
как добавить текст из textbox Form2(дочерняя форма) в listbox главной формы.
Код:
Код:
public: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
if (radioButton1->Checked==true) listBox1->Items->Add(textBox1->Text);
else listBox2->Items->Add(textBox1->Text);
}
if (radioButton1->Checked==true) listBox1->Items->Add(textBox1->Text);
else listBox2->Items->Add(textBox1->Text);
}
на форуме нашла пример
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++
public: void Set(String^ text)
{
label1->Text = text;
}
4) В файле Form2.h подключаем Form1.h:
Код C++
1
#include "Form1.h"
и создаем конструктор, который будет принимать и сохранять ссылку на первую форму для дальнейшего использования:
Код C++
Form2(Form1^ parent)
{
InitializeComponent();
parentForm = parent;
}
//...
Код C++
private: Form1^ parentForm;
По клику кнопки, будем вызывать метод Set родительской формы:
Код C++
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++
#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);
На этом все. Можно скомпилировать и проверить проект.
сделала:
Lab1.cpp
Код:
// Lab1.cpp: главный файл проекта.
#include "stdafx.h"
#include "Form1.h"
#include "Form2.h"
namespace testApp {
System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) {
Form2^ f2 = gcnew Form2();
f2->Show();
}
}
using namespace Lab1;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Создание главного окна и его запуск
Application::Run(gcnew Form1());
return 0;
}
#include "stdafx.h"
#include "Form1.h"
#include "Form2.h"
namespace testApp {
System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) {
Form2^ f2 = gcnew Form2();
f2->Show();
}
}
using namespace Lab1;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Создание главного окна и его запуск
Application::Run(gcnew Form1());
return 0;
}
Код:
private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e);
public: void Set(String^ text)
{
listBox1->Items->Add(text);
}
public: void Set(String^ text)
{
listBox1->Items->Add(text);
}
Код:
public:
Form2(Form1^ parent)
{
InitializeComponent();
parentForm = parent;
}
private:
/// <summary>
/// Требуется переменная конструктора.
Form1^ parentForm;
public: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
parentForm->Set(textBox1->Text);
}
Form2(Form1^ parent)
{
InitializeComponent();
parentForm = parent;
}
private:
/// <summary>
/// Требуется переменная конструктора.
Form1^ parentForm;
public: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
parentForm->Set(textBox1->Text);
}
1>------ Построение начато: проект: Lab1, Конфигурация: Debug Win32 ------
1> Form2.cpp
1> Lab1.cpp
1>Lab1.cpp(8): error C2065: Form2: необъявленный идентификатор
1>Lab1.cpp(8): error C2065: f2: необъявленный идентификатор
1>Lab1.cpp(8): error C2061: синтаксическая ошибка: идентификатор "Form2"
1>Lab1.cpp(9): error C2065: f2: необъявленный идентификатор
1>Lab1.cpp(9): error C2227: выражение слева от "->Show" должно указывать на тип класса, структуры или объединения либо на универсальный тип
1> тип: 'unknown-type'
помогите разобраться, пожалуйста в Builder C++ очень легко это сделать, а вот в Visual C++ не пойму как...
добавляем в проект строки обработки:
Form1.h
Код:
#include "Form2.h"
private: Form2^ f;
#pragma endregion
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
f = gcnew Form2();
f->button1->Click += gcnew System::EventHandler(this, &Form1::OnClick);
f->Show();
}
private: System::Void OnClick(System::Object^ sender, System::EventArgs^ e){
this->listBox1->Items->Add(f->textBox1->Text);
}
private: Form2^ f;
#pragma endregion
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
f = gcnew Form2();
f->button1->Click += gcnew System::EventHandler(this, &Form1::OnClick);
f->Show();
}
private: System::Void OnClick(System::Object^ sender, System::EventArgs^ e){
this->listBox1->Items->Add(f->textBox1->Text);
}
Код:
public: System::Windows::Forms::TextBox^ textBox1;
public: System::Windows::Forms::Button^ button1;
public: System::Windows::Forms::Button^ button1;
помогите разобраться, пожалуйста в Builder C++ очень легко это сделать, а вот в Visual C++ не пойму как...
Принципы ООП не знаете, почитайте Шилдта по этому вопросу.
у меня задание сделать это на visual c++, сама привыкла к Builder C++ и там намного легче и понятно.
А за ответ большое спасибо, попробую сделать так.