Собственная функция вместо ButtonClick

194
25 мая 2018, 08:20

C++ Builder 2006. Имеется БД Access, подключенная к Builder C++ через ADOConnection, ADOTable и DataSource. Необходимо вывести базу данных на форму не используя компонент dbgrid. То есть оформить вывод так как я хочу.

Логично, что нужно динамически генерировать элементы и в них записывать значения из полей таблицы. Часть того как я делаю:

for (int i = 1; i <= ADOTable1->RecordCount; i++) {
    Btn[i] = new TButton(UserMain);
    Btn[i]->Parent = UserMain;
    Btn[i]->Left = 240 + (220 * (i - 1)) * c;
    Btn[i]->Top = k * 270;
    Btn[i]->Name = "Button" + IntToStr(i);
    Btn[i]->Caption = "Подробнее";
}

В цикле так же генерируются и прочие элементы, но меня интересует именно Button Количество этих кнопок меняется в зависимости от БД. Как на них навесить обработчик события клика, чтобы при этом выводилось разное сообщение в зависимости от кнопки?

Пробую сделать через обычную функцию, для проверки в качестве параметра передаю просто индекс:

void showAbout(int i) {
    ShowMessage(i);
}
//и в предыдущем цикле такое:
Btn[i]->OnClick = showAbout(i);

Но это выдает ошибку [C++ Error] Unit2.cpp(73): E2109 Not an allowed type

Answer 1

При создании пометьте во вспомогательном поле - какой индекс имеет кнопка

Btn[i]->Tag = i;

Назначьте всем кнопкам один обработчик (обычную функцию нельзя - это должен быть метод объекта, соответствующий прототипу)

Btn[i]->OnClick = DynButtonClick;

А уже внутри обработчика смотрите Tag Sender-а и в зависимости от него что-то делайте

P.S. Вообще идея генерировать набор контролов на каждую запись БД - сомнительная. StringGrid-ом или TListView нельзя обойтись?

READ ALSO
Ошибка с xutility

Ошибка с xutility

пытаясь создать функцию которая бы выдавала случайное простое число, я получаю следующие ошибки при компиляции:

200
Кроссворд на с++

Кроссворд на с++

Студенческая задачка, дословно звучит так: Разработка программы "Кроссворд"Программа автоматически генерирует кросворд по определенной...

275
Кастомизация QMessageBox C++ Qt

Кастомизация QMessageBox C++ Qt

Ранее я задавал вопрос:

189
Заменить все нечетные элементы

Заменить все нечетные элементы

Помогите с написание метода: найти максимальное и минимальное значение и найденным максимальным значением заменить все нечетные значения...

189