Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/86: Рейтинг темы: голосов - 86, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 17.02.2009
Сообщений: 22

Как из второго окна обратиться к элементам первого?

05.03.2012, 17:39. Показов 16201. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Изучаю VS C++. Создал проект Windows Forms в среде CLR. Есть два окна, второе (Form_insert) вызывается из первого(Form1).
Из первого окна я спокойно управляю элементами во втором. А из второго окна обратиться к элементам первого не могу

Так вызываю второе окно
C++ Скопировано
1
2
3
4
5
6
private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e)
    {
        Form_insert^ nwDlg = gcnew Form_insert;
        nwDlg->set_text("eee"); //записываю текст в textBox1 второго окна через public метод
        nwDlg->Show(this);
    }
Из второго окна пытался управлять так:
C++ Скопировано
1
2
3
4
5
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
        Form^ frm = this->Owner;
        frm->textBox1->Text = "dd";
    }
Ошибка: textBox1: не является членом "System::Windows::Forms::Form" - понятно

или так:
C++ Скопировано
1
2
3
4
5
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
        Form1^ frm;
        frm->textBox1->Text = "dd";
    }
Ошибка: Form1: необъявленный идентификатор - почему во второй форме компилятор не понимает класс Form1? Хотя в певой форме я создавал экземпляр класса Form_insert и компилятор не ругался.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2012, 17:39
Ответы с готовыми решениями:

Массив. Элементы второго кратны 3 элементам первого массива
Доброго времени суток имеется фрагмент : begin Assign(m1,imf1);rewrite (m1); Assign(m2,imf2);rewrite (m2); sra:=0; ...

Элементы первого массива прибавить к элементам второго и образовать третий
$db=new mysql_conns (); $sqlres=$db->my_mysql_select ('select Power, Agility, Rage, Health, Energy, Intelect, Gooduck, free_skills...

Как из первого класса достучаться до объекта второго, а из второго до метода первого?
Есть два класса. Как можно из drawCircle достучаться до x,y,R, и из DrawNCirles дстучаться до drawCircle? class Data { public: int...

32
 Аватар для thebvog
74 / 54 / 12
Регистрация: 20.02.2012
Сообщений: 239
05.03.2012, 17:41
dopton, а вы сослались на модуль первой формы? То есть использовали типа #include "Form_insert.h".
0
0 / 0 / 0
Регистрация: 17.02.2009
Сообщений: 22
05.03.2012, 21:05  [ТС]
В модуле первой формы я ссылаюсь на вторую. Со второй на первую не ссылаюсь, иначе компилятор в заголовочном файле первой формы не понимает класс Form_insert
C++ Скопировано
1
2
3
4
5
6
private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e)
         {
             Form_insert^ nwDlg = gcnew Form_insert;
             nwDlg->set_text("eee");
             nwDlg->Show(this);
         }
Ошибки:
error C2065: Form_insert: необъявленный идентификатор
error C2065: nwDlg: необъявленный идентификатор
error C2061: синтаксическая ошибка: идентификатор "Form_insert"
error C2065: nwDlg: необъявленный идентификатор
error C2227: выражение слева от "->set_text" должно указывать на тип класса, структуры или объединения либо на универсальный тип
error C2065: nwDlg: необъявленный идентификатор
error C2227: выражение слева от "->Show" должно указывать на тип класса, структуры или объединения либо на универсальный тип

Добавлено через 12 минут
Цитата Сообщение от dopton Посмотреть сообщение
Из второго окна пытался управлять так:
C++ Скопировано
1
2
3
4
5
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
        Form^ frm = this->Owner;
        frm->textBox1->Text = "dd";
    }
Ошибка: textBox1: не является членом "System::Windows::Forms::Form" - понятно

или так:
C++ Скопировано
1
2
3
4
5
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
        Form1^ frm;
        frm->textBox1->Text = "dd";
    }
Ошибка: Form1: необъявленный идентификатор - почему во второй форме компилятор не понимает класс Form1? Хотя в певой форме я создавал экземпляр класса Form_insert и компилятор не ругался.
В этих случаях элемент textBox1 я объявляю в public секции класса Form1
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.03.2012, 20:05
Лучший ответ Сообщение было отмечено как решение

Решение

Объявите в 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
#include "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.
4
0 / 0 / 0
Регистрация: 17.02.2009
Сообщений: 22
07.03.2012, 22:33  [ТС]
Спасибо, заработало! Воспользовался "правильным" вариантом
0
 Аватар для Роман_93
5 / 5 / 0
Регистрация: 27.03.2012
Сообщений: 21
29.03.2012, 13:03
IGPIGP,
скажите как можно объявить переменные во 2 офрме
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.03.2012, 15:10
Цитата Сообщение от Роман_93 Посмотреть сообщение
скажите как можно объявить переменные во 2 офрме
Переменные 2 офрмы объявляются обыкновенно как и первой. Вы имеете ввиду переменные других файлов и в том числе первой формы?
0
 Аватар для Роман_93
5 / 5 / 0
Регистрация: 27.03.2012
Сообщений: 21
29.03.2012, 15:32
у меня есть Form1 в ней ессть кнопка открывающая Form2
когда я пишу допустим int a в Form1 то ошибок нет и все нормально работает а если я пишу в Form2 int b то появляется ошибка переопределения Error LNK2005
есле в Form1 удалить #include "Form2.h" то ошибок не будет но Form2 не откроется
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.03.2012, 15:52
Цитата Сообщение от Роман_93 Посмотреть сообщение
когда я пишу допустим int a в Form1 то ошибок нет и все нормально работает а если я пишу в Form2 int b то
Значит в Form1 уже объявлена int b. Два раза объявлять одно и тоже имя компилятор не разрешает и это нормально. Вы же сами вставили Form2 в Form1, по-этому не используйте её имён для объявлений в Form2. В ссылке, что я предложил есть всё, что бы передавать данные между формами, но способов как это делать ещё много. Попробуйте объяснить кратко, что Вы не поняли.
0
 Аватар для Роман_93
5 / 5 / 0
Регистрация: 27.03.2012
Сообщений: 21
29.03.2012, 15:58
переменная объявленна только в Form2
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.03.2012, 16:10
Цитата Сообщение от Роман_93 Посмотреть сообщение
переменная объявленна только в Form2
Чудес не бывает - наберите просто b в Form1 и посмотрите где она определена (наведите курсор -> правая кнопка -> Go to deffinition) Совет: не используйте имен типа a, b, c, x кроме локальных. Имя не занимает памяти по-этому лучше:
int myBolshoyBizonKotoriyGivetZaBugrom=0;
если уже нет выхода можно локализовать конфликтующее имя в своём пространстве имён, но у Вас похоже не тот случай.
0
4 / 4 / 0
Регистрация: 08.11.2011
Сообщений: 137
16.05.2012, 00:17
Цитата Сообщение от dopton Посмотреть сообщение
Спасибо, заработало! Воспользовался "правильным" вариантом
Оставьте целый код программы,пожалуйста)
0
0 / 0 / 0
Регистрация: 18.02.2013
Сообщений: 16
22.02.2013, 10:30
IGPIGP,
делала как вы написали, но у меня ошибка Form2: необъявленный идентификатор
по заданию во второй форме в textbox вводится слово и добавляется в первую форму в listbox
сделала так
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
// 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 добавила:
C++ Скопировано
1
2
3
4
5
    private: System::Void button5_Click(System::Object^  sender, System::EventArgs^  e); //открытие 2-ой формы
    public: void Set(String^ text)
    {
        listBox1->Items->Add(text);
    }
к Form2.h подключила Form1.h
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public:
        Form2(Form1^ parent)
        {
 
            InitializeComponent();
            parentForm = parent;
        }
....
 
private:
        /// <summary>
        /// Требуется переменная конструктора.
        Form1^ parentForm;
 
public: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
            // if (radioButton1->Checked==true) frm->listBox1->Items->Add(textBox1->Text);
            // else frm->listBox2->Items->Add(textBox1->Text);
            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'
подскажите пожалуйста, что сделала не так?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2013, 12:49
darya17, Вы сделали иначе. Прочтите всё внимательно. Начните всё с пустой формы и сделайте как написано. Дело тут не в сообразительности, а в относительной сложности, для человека который это делает впервые.
1. В Main не нужно подключать 2 формы. Туда подключается главная, стартовая Form1 (обычно).
2. Во второй форме Вы ничего не подключили.
Подключить это вставить в начало файла директивой #include "Form1.h".
Иначе имя Form1 в файле Form2.h -ничего компилятору не говорит. Об этом он и горюет.
Итак сосредоточьтесь, начните сначала и сделайте всё пошагово. Особенно внимательно вычитайте диалоги о ошибках предшественников. Я часто даю ссылки на эти темы потому, что подобные ошибки это вечные грабли для новичков.
0
0 / 0 / 0
Регистрация: 18.02.2013
Сообщений: 16
22.02.2013, 14:09
IGPIGP,
перед самим кодом я написала к Form2.h подключила Form1.h.
создала пустую форму как Вы и сказали, но к сожалению та же ошибка.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
22.02.2013, 14:23
darya17, ошибка здесь
не Form1 ,
а просто Form - это вам не С#
Это не правильно
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
public:
        Form2(Form1^ parent)
        {
 
            InitializeComponent();
            parentForm = parent;
        }
....
 
private:
        /// <summary>
        /// Требуется переменная конструктора.
        Form1^ parentForm;
нужно
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
public:
        Form2(Form^ paramform)
        {
 
            InitializeComponent();
            form1 = paramform;
        }
....
 
private:
        /// <summary>
        /// Требуется переменная конструктора.
        Form^ form1;
0
0 / 0 / 0
Регистрация: 18.02.2013
Сообщений: 16
22.02.2013, 15:08
MrCold,
исправила, но не очень помогло, теперь ругается на метод Set... посмотрите пожалуйста, может еще где то не то пишу.
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
// f.cpp: главный файл проекта.
 
#include "stdafx.h"
#include "Form1.h"
#include "Form2.h"
    namespace testApp {
        System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
            Form2^ f2 = gcnew Form2(this);
            f2->Show();
        }
    }
 
using namespace f;
 
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 
 
    // Создание главного окна и его запуск
    Application::Run(gcnew Form1());
    return 0;
}
Form1.h
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
#pragma once
 
namespace f {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Сводка для Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }
        public: void Set(String^ text)
    {
        listBox1->Items->Add(text);
    }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::ListBox^  listBox1;
    protected: 
    private: System::Windows::Forms::Button^  button1;
       
        private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e);
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->listBox1 = (gcnew System::Windows::Forms::ListBox());
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // listBox1
        
            // 
            // button1
            // 
            
            // 
            // 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->Controls->Add(this->listBox1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
 
        }
#pragma endregion
    
    };
}
Form2.h
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
#pragma once
#include "Form1.h"
 
 
namespace f {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Сводка для Form2
    /// </summary>
    public ref class Form2 : public System::Windows::Forms::Form
    {
    public:
        Form2(Form^ parent)
    {
        InitializeComponent();      
        form1 = parent;
    }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form2()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::TextBox^  textBox1;
    private: System::Windows::Forms::Button^  button1;
    protected: 
 
    private:
        /// <summary>
        Form^ form1;
 
        /// Требуется переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->textBox1 = (gcnew System::Windows::Forms::TextBox());
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // textBox1
            // 
            // 
            // button1
            // 
            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->Controls->Add(this->textBox1);
            this->Name = L"Form2";
            this->Text = L"Form2";
            this->ResumeLayout(false);
            this->PerformLayout();
 
        }
#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 form1->Set(textBox1->Text);
             }
    };
}
1> f.cpp
1>c:\users\сергей\documents\visual studio 2010\projects\f\f\Form2.h(92): error C2039: Set: не является членом "System::Windows::Forms::Form"
1> c:\program files\reference assemblies\microsoft\framework\.netframe work\v4.0\system.windows.forms.dll: см. объявление "System::Windows::Forms::Form"
1>f.cpp(8): error C2882: Form2: недопустимое использование идентификатора пространства имен в выражении
1>f.cpp(8): error C2065: f2: необъявленный идентификатор
1>f.cpp(8): error C2061: синтаксическая ошибка: идентификатор "Form2"
1>f.cpp(9): error C2065: f2: необъявленный идентификатор
1>f.cpp(9): error C2227: выражение слева от "->Show" должно указывать на тип класса, структуры или объединения либо на универсальный тип
1> тип: 'unknown-type'
1> Form2.cpp
1>c:\users\сергей\documents\visual studio 2010\projects\f\f\Form2.h(92): error C2039: Set: не является членом "System::Windows::Forms::Form"
1> c:\program files\reference assemblies\microsoft\framework\.netframe work\v4.0\system.windows.forms.dll: см. объявление "System::Windows::Forms::Form"
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2013, 15:40
C++ Скопировано
1
2
3
4
5
6
7
 
f.cpp: главный файл проекта.
 
#include "stdafx.h"
#include "Form1.h"
#include "Form2.h"
    namespace testApp {
Повторю, посмотрите темы:
Как сделать так, чтобы разные файлы могли видеть друг друга?
Ошибки при вызове форм - Syntax error
Как добавить кнопки на вторую форму?
И сделайте всё сначала. Вы повторяете те же ошибки. Например namespace testApp это пространство моего проекта, а Вам нужно Ваше f если я понимаю верно. Хотя оно может быть любое, но Ваше, myLab2 например.
И ещё дескриптор form1, в этом случае я бы присвоил так:
C++ Скопировано
1
form1= dynamic_cast<Form1^>(parent);
Постройте новый проект и посмотрите примеры.

Не по теме:

darya17, в этой теме всё уже произошло. Почему бы не общаться в своей теме. Ведь это трудновато читать другим будет. ;)

0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
22.02.2013, 16:02
Цитата Сообщение от darya17 Посмотреть сообщение
по заданию во второй форме в textbox вводится слово и добавляется в первую форму в listbox
Если кроме Листбокса во второй форме ничего не нужно тогда так ( и метод Set не нужен )

Form1.h
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
#pragma once
#include "Form2.h"
/////////////////
 
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
            form2  = gcnew Form2(listBox1);
        }
        private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::ListBox^  listBox1;
 
    Form2 ^ form2;
    private: void button1_Click( Object^ sender, EventArgs^ e)
             {
              
               form2->Show();
             }
Form2.h
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
public ref class Form2 : public System::Windows::Forms::Form
    {
    public:
        Form2(ListBox^ paramlistBox)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
             listBox = paramlistBox;
        }
 
 
            private: System::Windows::Forms::ListBox^ listBox;
                        private: System::Windows::Forms::TextBox^  textBox1;
                    private: System::Windows::Forms::Button^  button1;
 
 
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
             {
                 if (textBox1->Text->Length > 0 )
                 {
                          listBox->Items->Add(textBox1->Text);              
                 }
                  else
                        MessageBox::Show("Введите данные !!!");
             }
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2013, 16:05
Цитата Сообщение от MrCold Посмотреть сообщение
listBox->Items->Add(textBox1->Text);
listBox придется объявить public: в Form1 ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2013, 16:05
Помогаю со студенческими работами здесь

Запуск второго консольного окна из первого
Задача такая Необходимо реализовать консольную программу, которая бы фильтровала поток текстовой информации подаваемой на вход и на...

Найти хендл второго (а не первого) окна по заданному классу
Помогите пожалуйста обшарил весь интернет и не нашел ответа как мне вписать строку во второе поле edit ? я написал программу которая ищет...

Составить 3-й массив, каждый элемент которого будет равен четным элементам первого массива и нечетным второго массива
Даны 2 одномерных массива, составить 3 массив, каждый элемент которого будет равен четным элементам первого массива и нечетным второго...

Как обратиться к элементам ArrayList?
Как обратиться к элементам AraayList !?!? привожу код в аттаче!

Выходной поток первого числа, второго , суммы первого и второго чисел
Здравствуйте! Помогите пожалуйста написать программу, которая через стандартный входной поток принимает текстовые строки, в каждой из...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер