давно
Старший Модератор
17042
808
12.07.2008, 13:40
общий
это ответ
Здравствуйте, Asteriks!
Действительно, в Borland C++ Builder имеется более изящное решение. Щелчок по кнопке вызывает событие OnClick, которое обрабатывается в функции, принимающей в качестве аргумента указатель на объект, который это событие (щелчок) вызвал - TObject* Sender. Для получения доступа к свойствам этого объекта, нужно прямо указать, что это кнопка, выполнив приведение типов:
(TButton*)Sender
Допустим, у нас есть форма, на которой три кнопки: Button1, Button2 и Button3. Присвоим свойству Tag каждой кнопки значение 1, 2 или 3, соответственно. Реализуем обработчик события OnClick для первой кнопки (см. приложение).
В этом обработчике переменной i присваивается номер тега текущей (вызывающей событие OnClick) кнопки: int i = ((TButton*)Sender)->Tag;
После этого в качестве обработчика события OnClick каждой из последующих кнопок назначьте обработчик щелчка по первой кнопке - Button1Click (воспользуйтесь выпадающим списком реализованных обработчиков на вкладке Events инспектора объектов (Object Inspector).
P.S. С помощью кнострукции ((TButton*)Sender)-> можно получить доступ к любому свойству текущей (щёлкнутой) кнопки. Например, дополните обработчик, приведённый в приложении, следующей строкой и посмотрите, что получится:
((TButton*)Sender)->Caption = "Щёлкнуто!";
Удачи!
Приложение:
//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){ int i = ((TButton*)Sender)->Tag; AnsiString sMessage = "Нажата кнопка номер " + IntToStr(i); ShowMessage(sMessage);}//---------------------------------------------------------------------------