Doctor_ |
Отправлено: 15.08.2004, 21:27 |
|
Не зарегистрирован
|
есть несколько динамически создаваемых кнопок, которые при нажатии вызывают одну функцию обработки. Как в функции определить какая из кнопок ее вызвала? В функцию передается ссылка Sender типа TObject, но я че-то не могу догнать как это поюзать Хелп! Лучше с примером. |
|
Георгий |
Отправлено: 15.08.2004, 23:01 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
в обработчике нажатия кнопки объект Sender должен представлять собой сам экземпляр объекта кнопка, которую нажали.
шмякаем на форму 2 кнопки и:CODE | void __fastcall TForm1::Button1Click(TObject *Sender)
{
static int y = 0;
TButton *ptrButton = new TButton(this);
ptrButton->Parent=this;
ptrButton->Top=y;
ptrButton->Visible=true;
ptrButton->Enabled=true;
ptrButton->Caption=y;
y+=ptrButton->Height;
ptrButton->OnClick=this->Button2Click;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString str;
TButton *ptrButton = dynamic_cast<TButton*>(Sender);
if ( !ptrButton ) str = "critical error";
else
{
const int top = ptrButton->Top;
const int vert= top / ptrButton->Height;
str.printf("clicked button top=%i calclated vertical position=%i", top, vert );
};
Application->MessageBox( str.c_str(), "обработчик нажатия кнопки", MB_OK);
} | очевидно, что все данные имеющиеся как свойства кнопки легко доступны.
отсюда вывод — если прикладная логика требует дополнительных данных, ассоциированных с каждой кнопкой, то наиболее логично создать своего потомка от стандартной кнопки и в его свойства внести дополнительные данные.
например, если динамически создаётся 3 кнопки (да, нет, отмена), то для однозначной идентификации достаточно прочитать в обработчике поле Caption.
а если на форме есть несколько кнопок с одинаковыми названиями, но отличающиеся по положению в пользовательском интерфейсе, то придётся или идентифицировать их по координатам или по дополнительным атрибутам.
кул! мой 500й ответ по летоисчислению нового движка форума
Отредактировано Георгий — 16/08/2004, 00:06 |
|
Gedeon |
Отправлено: 16.08.2004, 08:19 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
У этих кнопок есть свойство Tag, вот и назначайте с последовательным инкриментом при создании, а потом читайте.
|
|
|