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

Доступ к свойствам компонента на динамически созданной форме

12.12.2013, 16:12. Показов 1597. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я создал динамичски новую форму, затем разместил на ней чекбокс. Сделал обработчик CheckedChanged. Но как проверить, что юзер снял или поставил галку? Для моего кода компилятор выдает ошибку

error C2039: Checked: не является членом "System::Windows::Forms::Control"

Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
             Form^ form_map_maker = gcnew Form; // создаем форму
             form_map_maker->Size = System::Drawing::Size(330, 250);// устанавливаем размер формы 
             form_map_maker->StartPosition = FormStartPosition::CenterScreen; //определяем начальное положение формы
             form_map_maker->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; // определяем стиль формы (модальное, изменяемое по размеру и т.п.)
             form_map_maker->Text = "Построить"; // определяем заглавный текст (название) формы
             form_map_maker->HelpButton = false; // определяем, показывать или нет кнопку помощи на форме
             form_map_maker->MaximizeBox = false; // определяем, показывать или нет кнопку "Развернуть на весь экран" на форме
             form_map_maker->MinimizeBox = false; // определяем, показывать или нет кнопку "Свернуть" на форме
 
             CheckBox^ checkBox1_map_maker = gcnew CheckBox; // создаем компонент checkBox1_map_maker
             checkBox1_map_maker->Location = Point(160,75); // определяем положение checkBox1_map_maker на форме 
             checkBox1_map_maker->Size = System::Drawing::Size(180, 20);// устанавливаем размер checkBox1_map_maker
             checkBox1_map_maker->Text = "на начало "; // определяем текст метки checkBox1_map_maker
             checkBox1_map_maker->Checked = false; // убираем "галочку"
             checkBox1_map_maker->CheckedChanged += gcnew System::EventHandler(this, &Form1::checkBox1_map_maker_CheckedChanged); // добавляем обработчик событя при изменении "галочки"
             form_map_maker->Controls->Add( checkBox1_map_maker ); // добавляем checkBox1_map_maker на форму
 
             form_map_maker->ShowDialog(); // показываем форму как модальное окно;
Далее код обработчика CheckedChanged:

C++
1
2
3
4
5
6
7
8
9
    private: System::Void checkBox1_map_maker_CheckedChanged(System::Object^  sender, System::EventArgs^  e) 
             {
                 Control ^Ctrl = dynamic_cast<Form^>(dynamic_cast<CheckBox^>(sender)->Parent)-> Controls[0]; 
 
                 if (Ctrl->Checked == false) 
                 {
                 }
 
             }
Ошибка вот на эту строку:
C++
1
if (Ctrl->Checked == false)
Вроде как у класса Control нет такого свойства - Checked.

Как быть тогда? Прошу помощи!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2013, 16:12
Ответы с готовыми решениями:

Обращение к динамически созданному объекту на динамически созданной форме
Как, создав динамический объект, TButton, обратиться к нему? Unit1.cpp void __fastcall TForm1::Button2Click(TObject *Sender) { ...

Доступ к свойствам компонента через его имя
Как изменить какой нибудь параметр у объекта, если его Name дан в виде строки? Например: пользователь в эдите пишет &quot;Panel1&quot;,...

Доступ к свойствам динамически созданных кнопок из обработчика событий
Здравствуйте, создал динамически кнопки и обработчик для них // Кнопки цифр int x = 30, y = 60; ...

2
4 / 4 / 0
Регистрация: 05.11.2013
Сообщений: 12
14.12.2013, 13:10  [ТС]
решил проблему так:

C++
1
2
3
4
5
6
7
8
private: System::Void checkBox1_map_maker_CheckedChanged(System::Object^  sender, System::EventArgs^  e)
{
     CheckBox ^Ctrl_checkbox = dynamic_cast<CheckBox^>(sender);
     if (Ctrl_checkbox->Checked == true)
         {
                      //  код
          }
}
Но появилась следующая. На форму добавил dateTimePicker:

C++
1
2
3
DateTimePicker^ dateTimePicker1_map_maker = gcnew DateTimePicker; // создаем компонент dateTimePicker1_map_maker
dateTimePicker1_map_maker->Location = Point(5,75); // определяем положение dateTimePicker1_map_maker на форме
form_map_maker->Controls->Add( dateTimePicker1_map_maker ); // добавляем dateTimePicker1_map_maker на форму
Как при смене галочки чекбокса изменить его значение Value у dateTimePicker1_map_maker?
Вариант

C++
1
2
3
4
5
6
7
8
9
private: System::Void checkBox1_map_maker_CheckedChanged(System::Object^  sender, System::EventArgs^  e)
{
     CheckBox ^Ctrl_checkbox = dynamic_cast<CheckBox^>(sender);
     if (Ctrl_checkbox->Checked == true)
         {
                 DateTimePicker ^Ctrl = dynamic_cast<DateTimePicker^>(sender);
                 Ctr->Value = DateTime(2000, 1, 1, 0, 0, 0);
          }
}
не работает, пишет:

Необработанное исключение типа "System.NullReferenceException" произошло в System.Windows.Forms.dll
Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.


Кто нибудь может помочь? Мой первый вопрос оставлен был без ответа, на этом форуме есть живой кто?
Профессионалы, ау! Помогите нубу, плиз!
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.12.2013, 02:43
Цитата Сообщение от Vib75 Посмотреть сообщение
на этом форуме есть живой кто?
Все тут живы.
Однако стремление создавать, что-то динамически и нежелание добавить элемент в дизайнере и посмотреть, что он добавляет в конструктор для создания элемента, отбивает желание помогать.
Вообще, до работы по созданию экземпляров из кода, нужно посмотреть как это работает в дизайнере.
Почитать о классах. Вот Вы пытаетесь локально объявить дескриптор контролла, который не является членом класса.
Потом аргументы делегата события... sender это объект который передаётся владельцу, в Вашем случае форме. И для данного события это и есть Ваш чекбокс. Его нельзя преобразовать к чему-то ещё...
Добавьте из дизайнера на пустую форму DateTimePicker и посмотрите, что добавляет дизайнер в код конструктора формы.
Ну и ради любопытства, посмотрите на нижеследующее. Не забывая, что Вам ещё, возможно, предстоит вручную объявить делегат и присоединить метод обработки.
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#pragma once
 
namespace Date_Time_Picker_test {
 
    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;
 
 
//VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
//чтобы использовать контрол в форме, он должен быть её членом:
             private: DateTimePicker^ dateTimePicker1;
//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
    protected: 
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#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(122, 165);
            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(284, 262);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
 
        }
#pragma endregion
 
//VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
//отдельная инициализация для контролла, хотя лучше это делять в конструкторе
//но для примера
//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
public:
void CreateMyDateTimePicker(
Point loc,
String^ nam,
System::Drawing::Size siz    
     )
   {
      // Create a new DateTimePicker control and initialize it.
      dateTimePicker1 = gcnew DateTimePicker();
 
        dateTimePicker1->Location = loc;
        dateTimePicker1->Name = nam;
        dateTimePicker1->Size = siz;
 
 
      // Set the MinDate and MaxDate.
      dateTimePicker1->MinDate = DateTime(1985,6,20);
      dateTimePicker1->MaxDate = DateTime::Today;
 
      
 
      // Set the CustomFormat string.
      dateTimePicker1->CustomFormat = "MMMM dd, yyyy - dddd";
      dateTimePicker1->Format = DateTimePickerFormat::Custom;
 
      // Show the CheckBox and display the control as an up-down control.
      dateTimePicker1->ShowCheckBox = true;
      dateTimePicker1->ShowUpDown = true;
      this->Controls->Add(this->dateTimePicker1);
     // this->dateTimePicker1->Show();
     
   }
 
 
 
 
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
//по щелчку запускаем инициализацию
CreateMyDateTimePicker(Point(13, 13), "dtp", System::Drawing::Size(200, 20) );
 
             }
    };
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2013, 02:43
Помогаю со студенческими работами здесь

Как получить доступ к свойствам компонента из dataModule unit?
Добрый день, Такая проблемка: 1. В главной форме vcl формы (Unit = Main; Name = MainForm) есть событие FormCreate основной . ...

Подключение визуального компонента и доступ к его свойствам и методам
Добрый день. Есть несколько визуальных компонентов написанных мной на С# у них одинаковые методы и свойства, проблема состоит в следующем...

Не могу получить доступ к свойствам дочернего компонента из массива
Строка 49 - объявление свойств и 80 - вызов в родительском компонетн. class UserTD extends React.Component { ...

Обращение к динамически созданной форме
Здравствуйте, создаю форму динамически: TForm* Forma = new TForm(this); Forma-&gt;Name=&quot;R&quot;; ...

Обращение к динамически созданной форме
Динамически создал форму и кнопку на ней. Не могу понять как обратиться к этой форме из обработчика нажатия кнопки, чтоб, например, закрыть...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 27.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 27.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 27.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 25.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 25.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru