Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 47

Ошибка при обращении к динамической кнопке

07.01.2011, 21:53. Показов 842. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть база, тему создал тут так как проблема не с базой а с обращением к динамической кнопке, суть проблемы в том, что каждой динамической кнопке задаю свой Tag, обращаюсь к событию ButtonClicked где хочу использовать параметр Tag....но не знаю как кто может помогите
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cspin"
#pragma resource "*.dfm"
TForm1 *Form1;
TButton *new_btn;
TButton *array_btn[5];
int a=0;
int z=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ButtonClicked(TObject *Sender)
{
 Form1->ADOQuery1->Close();
        Form1->ADOQuery1->SQL->Clear();
        Form1->ADOQuery1->SQL->Add("SELECT test.id_lec, test.name, test.put");
        Form1->ADOQuery1->SQL->Add("FROM test");
        Form1->ADOQuery1->SQL->Add("where id_lec="+/*Как вызвать Tag этой кнопки*/+";"); //ТУТ ПРОБЛЕМА!!!!!
          Form1->ADOQuery1->Open();
        Form1->ADOQuery1->Active=true;
 Form1->ADOQuery1->Close();
 Form1->ADOQuery1->Open();
RichEdit1->Lines->LoadFromFile(Form1->ADOQuery1->FieldByName("put")->AsString);
 
}
 
//---------------------------------------------------------------------------
 
 
 
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->ADOQuery1->Close();
Form1->ADOQuery1->SQL->Clear();
Form1->ADOQuery1->SQL->Add("SELECT test.id_lec, test.name, test.put");
Form1->ADOQuery1->SQL->Add("FROM test");
 Form1->ADOQuery1->Close();
  Form1->ADOQuery1->Open();
Form1->ADOQuery1->Active=true;
a=Form1->ADOQuery1->RecordCount;
 
 
for(int i = 1; i <= a; i++)
    {
        Form1->Edit1->Text=i;
        array_btn[i] = new TButton (Form1);
        array_btn[i]->Parent = Form1;
        array_btn[i]->Top = 5 + (24 * i);
        array_btn[i]->Left = 80;
          Form1->ADOQuery1->Close();
        Form1->ADOQuery1->SQL->Clear();
        Form1->ADOQuery1->SQL->Add("SELECT test.id_lec, test.name, test.put");
        Form1->ADOQuery1->SQL->Add("FROM test");
        Form1->ADOQuery1->SQL->Add("where id_lec="+Form1->Edit1->Text+";");
          Form1->ADOQuery1->Open();
        array_btn[i]->Caption = Form1->ADOQuery1->FieldByName("name")->AsString;
        array_btn[i]->Tag=i;
        array_btn[i]->OnClick=ButtonClicked;
    }
 
 
 //Form1->ADOQuery1->Close();
 //Form1->ADOQuery1->Open();
//Form1->ADOQuery1->Active=true;
//Form1->Label1->Caption=Form1->ADOQuery1->FieldByName("name")->AsString;
//RichEdit1->Lines->LoadFromFile(Form1->ADOQuery1->FieldByName("put")->AsString);
//Form1->RadioGroup1->Items->Add(Form1->ADOQuery1->FieldByName("ot3")->AsString);
//Form1->RadioGroup1->Items->Add(Form1->ADOQuery1->FieldByName("ot4")->AsString);
//per=Form1->ADOQuery1->FieldByName("otvet")->AsInteger;
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Text=1;
}
//---------------------------------------------------------------------------
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.01.2011, 21:53
Ответы с готовыми решениями:

Ошибка при обращении к динамической глобальной переменной
использую в файле Unit1(Form1) 2 переменные, которые обьявляю как глобальные в начале файла: TStringList *q1 = new TStringList; ...

Не срабатывает событие при обращении к кнопке по индексу
Почему не срабатывает событие? Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)...

Ошибка при обращении к ЦС
Всем привет. После выходных перестал работать удостоверяющий центр. Приостановлен выпуск ЭП. В журнале всплывает данная ошибка. Помогите...

5
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.01.2011, 23:05
Непонятки:
C++
1
2
3
TButton *array_btn[5];
...
a=Form1->ADOQuery1->RecordCount;
Вы всегда делаете 5 кнопок , независимо от количества RecordCount ?

Пример:
C++
1
2
3
for(int I = 0; i< ComponentCount; i++) {
  if(Components[i]->Tag == 1) {Edit1->Text=1;}
}
Правильно:
C++
1
2
3
4
for(int i = 0; i < ComponentCount; i++) { 
  array_btn = dynamic_cast<TButton*>(Components[i]); 
    if(array_btn->Tag == 1) {Edit1->Text=1;}
}
или вам гораздо проще :
C++
1
 if(array_btn->Tag == 1) {Edit1->Text=1;}
или в цикле
C++
1
2
3
if (array_btn->Tag == ADOQuery1->Records[i]) { // просто пример
Edit1->Text=1;
}
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 47
07.01.2011, 23:12  [ТС]
C++
1
2
3
if (array_btn->Tag == ADOQuery1->Records[i]) { // просто пример
Edit1->Text=1;
}
[/QUOTE]
не всегда 5, будет добавление записей , я же и стремлюсь что бы сами кнопки создавались с добавлением записи
твой пример не подходит так как array_btn->Tag в событии ButtenCliked не определяет...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.01.2011, 23:15
1. Тогда зачем объявлять массив ?
2. Попробуй вставить TButton *array_btn; в Public (*.H) , и мой код - для примера, а не для копипейста, что-то типа "информации к размышлению"
3. Что такое ButtonClicked ? самопальная функция ? и где она используется ?
ага, кажется , для array_btn ... тогда делай обработчик для самопальной кнопки -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.H
//---------------------------------------------------------------------------
private:    // User declarations
    TComponent *SomeComponent;
    void __fastcall SomeComponentClick (TObject *Sender); // самописная ф-я - событие для SomeComponent
//---------------------------------------------------------------------------
 
.CPP
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    SomeComponent = new TSomeComponent(this);   
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
    SomeComponent->OnClick = SomeComponentClick; // обработчик нажатия для SomeComponent
//---------------------------------------------------------------------------
void __fastcall TForm1::SomeComponentClick (TObject *Sender) // событие для SomeComponent
{
    ShowMessage("SomeComponent Click");
}
//---------------------------------------------------------------------------
- как-то так .
удачи
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 47
08.01.2011, 03:30  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
1. Тогда зачем объявлять массив ?
2. Попробуй вставить TButton *array_btn; в Public (*.H) , и мой код - для примера, а не для копипейста, что-то типа "информации к размышлению"
3. Что такое ButtonClicked ? самопальная функция ? и где она используется ?
ага, кажется , для array_btn ... тогда делай обработчик для самопальной кнопки -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.H
//---------------------------------------------------------------------------
private:    // User declarations
    TComponent *SomeComponent;
    void __fastcall SomeComponentClick (TObject *Sender); // самописная ф-я - событие для SomeComponent
//---------------------------------------------------------------------------
 
.CPP
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    SomeComponent = new TSomeComponent(this);   
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
    SomeComponent->OnClick = SomeComponentClick; // обработчик нажатия для SomeComponent
//---------------------------------------------------------------------------
void __fastcall TForm1::SomeComponentClick (TObject *Sender) // событие для SomeComponent
{
    ShowMessage("SomeComponent Click");
}
//---------------------------------------------------------------------------
- как-то так .
удачи
твои вариант не подошли, спасибо всем но решение проблемы нашел
если интересно вот, как нужно было обратиться к динамически созданной кнопке , может кому пригодиться
C++
1
dynamic_cast<TButton *>(Sender)->Tag
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
08.01.2011, 04:34
и где ж это ты нашел ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.01.2011, 04:34
Помогаю со студенческими работами здесь

Ошибка при обращении к объектам при открытии формы в режиме добавления данных acFormAdd
запускаю простой код, который в теории должен открыть форму в режиме добавления данных и сделать кнопки не активными Private Sub...

Ошибка при обращении к Label при запуске приложения
Ошибка в строке Form1.Label1.Caption:=DateToStr(today); Помогите исправить ошибку unit Unit1; interface

Ошибка при обращении к классу
Доброго времени суток. Использую RAD Studio 2007 и возникла следующая проблема: не могу обратиться к элементам ии функциям созданного...

Ошибка при обращении к листу
For i = 1 To 1 '28 str = &quot;Íåäåëÿ&quot; &amp; CStr(i) Worksheets.Add.Name = str Worksheets(&quot;Íåäåëÿ1&quot;).Range(Cells(topCounterY -...

Ошибка при обращении к перечислению
учусь работать с перечислениями и ошибка в проектировании самого енума... public abstract class Train { int countPassenger; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru