Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6305
Последний выпуск: 19.06.2015

как добавить текст из textbox Form2(дочерняя форма) в listbox главной формы.

74K
22 февраля 2013 года
darya17
21 / / 18.02.2013
к Form1.h подключаю Form2.h
 
Код:
//открываю 2-ую форму в Form1.h:      
 private: System::Void button5_Click(System::Object^  sender, System::EventArgs^  e){
           Form2^ f2 = gcnew Form2();
           f2->Show();
        }
Form2.h

 
Код:
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);
         }
ругается, что не знает listbox

на форуме нашла пример
Цитата:

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;
}
добавила в Form1.h

 
Код:
private: System::Void button5_Click(System::Object^  sender, System::EventArgs^  e);
public: void Set(String^ text)
    {
        listBox1->Items->Add(text);
    }
добавила в Form2.h

Код:
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);
         }
запускаю и:
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++ не пойму как...
459
23 февраля 2013 года
cronya
420 / / 03.01.2009
Цитата:
Как добавить текст textbox из Form2 в listbox главной формы


добавляем в проект строки обработки:
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);
             }
Form2.h

 
Код:
public: System::Windows::Forms::TextBox^  textBox1;
public: System::Windows::Forms::Button^  button1;
А вообще для работы с winform используют C#, ибо данный язык для этого и разрабатывался

Цитата:
помогите разобраться, пожалуйста в Builder C++ очень легко это сделать, а вот в Visual C++ не пойму как...


Принципы ООП не знаете, почитайте Шилдта по этому вопросу.

74K
23 февраля 2013 года
darya17
21 / / 18.02.2013
Цитата:
А вообще для работы с winform используют C#, ибо данный язык для этого и разрабатывался



у меня задание сделать это на visual c++, сама привыкла к Builder C++ и там намного легче и понятно.


А за ответ большое спасибо, попробую сделать так.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог