С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750

Обращение из одного обработчика событий к элементам, объявленным в другом обработчике

02.03.2018, 14:59. Показов 1556. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно по нажатию кнопки button1 удалить двумерный массив кнопок, созданный в Form1_Load.
Не знаю, как обратиться к элементам массива.
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
#pragma endregion
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e)
{
 
    array<Button^, 2>^ M = gcnew array<Button^, 2>(5,5); 
    for(int i = 0; i < M->GetLength(0); i++)
    {
        for(int j=0; j < M->GetLength(1);  j++)
        {
            M[i,j] = gcnew Button();
            M[i,j]->Size = Drawing::Size(40,40);
            M[i,j]->Text = i.ToString()+"; "+j.ToString();
            M[i,j]->Location = System::Drawing::Point(40*j, 40*i);
            Controls->Add(M[i,j]);
        }
    }
}
 
 
 
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
{
                for(int i = 0; i < 10; i++)
                {
                    for(int j=0; j<10; j++)
                    {
                        this->Controls->Remove(M[i,j]); 
                    }
 
                }
}
Ошибка здесь: this->Controls->Remove(M[i,j]);
Но чем заменить this ?
Подскажите, кто знает, или дайте ссылку.

(Язык С++, среда Visual Studio 2010)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2018, 14:59
Ответы с готовыми решениями:

Переход из одного обработчика событий в другой
Мне нужно одно и то же действие (код) выполнять при разных событиях. Но не хочется писать фунцию и вызывать её в разных местах. Вопрос:...

Как объявить переменную что бы ее можно было передавать из одного обработчика событий в другой
как объявить переменную что бы ее можно было передавать из одного обработчика событий в другой пример из private: System::Void...

CSS - обращение к элементам одного уровня
Добрый вечер. Есть HTML код: ... &lt;item&gt; &lt;punkt1&gt;&lt;/punkt1&gt; &lt;punkt2&gt;&lt;/punkt2&gt; &lt;/item&gt; ...

4
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.03.2018, 22:16
Привет LVV, я давненько не писал на CLI но кажись как-то так:
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#pragma once
 
namespace Array_buttons_vs_del {
 
    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
    ///
    /// Внимание! При изменении имени этого класса необходимо также изменить
    ///          свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
    ///          связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
    ///          конструкторы не смогут правильно работать с локализованными
    ///          ресурсами, сопоставленными данной форме.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    protected: 
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
        array<Button^, 2>^ M ;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(330, 263);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(443, 298);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
            this->ResumeLayout(false);
 
        }
#pragma endregion
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
M = gcnew array<Button^, 2>(5,5); 
    for(int i = 0; i < M->GetLength(0); i++)
    {
        for(int j=0; j < M->GetLength(1);  j++)
        {
            M[i,j] = gcnew Button();
            M[i,j]->Size = Drawing::Size(40,40);
            M[i,j]->Text = i.ToString()+"; "+j.ToString();
            M[i,j]->Location = System::Drawing::Point(40*j, 40*i);
            Controls->Add(M[i,j]);
        }
    }
 
             }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
for(int i = 0; i < M->GetLength(0); i++)
    {
        for(int j=0; j < M->GetLength(1);  j++)
        {
            this->Controls->Remove(M[i,j]);//удаляя ссылки - удаляем ресурсы
            //больше ничего не требуется :)
           
        }
    }
 
             }
    };
}
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14175 / 5366
Регистрация: 17.03.2014
Сообщений: 28,862
Записей в блоге: 1
05.03.2018, 22:30
Лучший ответ Сообщение было отмечено LVV как решение

Решение

LVV, this здесь ни при чем. Раз тебе нужно чтобы переменная M была видна в обоих методах, значит нужно объявить её в области видимотсти доступной им обоим. Такой областью является сам класс.
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
#pragma endregion
private:
 
array<Button^, 2>^ M; 
 
System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e)
{
    M = gcnew array<Button^, 2>(5,5); 
    for(int i = 0; i < M->GetLength(0); i++)
    {
        for(int j=0; j < M->GetLength(1);  j++)
        {
            M[i,j] = gcnew Button();
            M[i,j]->Size = Drawing::Size(40,40);
            M[i,j]->Text = i.ToString()+"; "+j.ToString();
            M[i,j]->Location = System::Drawing::Point(40*j, 40*i);
            Controls->Add(M[i,j]);
        }
    }
}
 
System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
{
                for(int i = 0; i < 10; i++)
                {
                    for(int j=0; j<10; j++)
                    {
                        this->Controls->Remove(M[i,j]); 
                    }
 
                }
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.03.2018, 22:40
Если массив больше не понадобится то:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
 if(M != nullptr)//чтобы button1 не стала миной :)
{
for(int i = 0; i < M->GetLength(0); i++)
    {
        for(int j=0; j < M->GetLength(1);  j++)
        {
            this->Controls->Remove(M[i,j]);//удаляя ссылки - удаляем ресурсы
            //больше ничего не требуется :)
           
        }
    }
                 }
delete M;
 
             }
А ещё красивее, если я помню верно, положить кнопки и пр. добро на панельку, а уж её положить в Controls. Когда будет не нужна - выковырять её ссылку из Controls и всё. Массив прибить придётся отдельно.
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
11.04.2018, 10:51  [ТС]
Спасибо всем.
Был занят, долго не заходил сюда.
Разберусь с Вашими кодами и обязательно отпишусь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2018, 10:51
Помогаю со студенческими работами здесь

Обращение ко всем элементам одного типа
Доброго времени суток ! Подскажите, пожалуйста, как обратиться ко всем элементам одного типа ? Имеется около 200 picturebox ( да,...

Обращение к переменной из одного потока в другом
Добрый день, господа форумчане. Есть класс server, который выполняет много какого функционала и он работает в своём потоке. Есть у...

Обращение к методу из одного класса в другом
Подскажите, есть ли какая-нибудь возможность обратиться из одного класса в другой, не наследуя при этом полностью этот класс...т.е у меня...

Обращение к элементам ArrayList, который в другом ArrayList
Здравствуйте. У меня есть arraylist типа arraylist. А уже каждый внутренний arraylist типа JTextField. У JTextField (текстовое поле)...

Отделение работы обработчика событий клавиатуры от событий ввода текста в поля редактирования
Проблема: есть форма с графическими компонентами, в которых редактируется текст. И вот проблема - обработчик событий клавиатуры...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru