Вы не можете назначить обработчик, который не соответствует подписи, которую ожидает OnClick
:
typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);
Это означает, что вы не можете добавлять дополнительные параметры вообще.
Однако вы можетеназначьте один обработчик OnClick
всем элементам управления TEdit
, а затем используйте параметр Sender
, чтобы узнать, по какому нажатию TEdit
, например:
Edit = new TEdit*[nr_elem];
for(int i = 0; i < nr_elem; ++i)
{
Edit[i] = new TEdit(this);
Edit[i]->Width = 75;
Edit[i]->Height = 20;
Edit[i]->Top = 100+15*i;
Edit[i]->Left = 50;
Edit[i]->Parent = this;
Edit[i]->Tag = i;
Edit[i]->OnClick = EditClick;
}
...
void __fastcall TForm1::EditClick(TObject *Sender)
{
TEdit *Edit = static_cast<TEdit*>(Sender);
EditNClick(Edit, Edit->Tag);
}
void __fastcall TForm1::EditNClick(TEdit *Sender, int index)
{
Sender->Text = _D("Enter some value in the ") + String(index) + _D(" box");
}
Если вы нене нужно полагаться на Tag
(т. е. если вы используете его для чего-то другого), или если вы хотите присоединить дополнительные пользовательские данные к каждому редактированию, вы можете использовать вместо этого пользовательский производный класс:
class TMyEdit : public TEdit
{
public:
int ArrayIndex;
...
__fastcall TMyEdit(TComponent *Owner) : TEdit(Owner) {}
};
...
Edit = new TEdit*[nr_elem];
for(int i = 0; i < nr_elem; ++i)
{
Edit[i] = new TMyEdit(this);
Edit[i]->Width = 75;
Edit[i]->Height = 20;
Edit[i]->Top = 100+15*i;
Edit[i]->Left = 50;
Edit[i]->Parent = this;
static_cast<TMyEdit*>(Edit[i])->ArrayIndex = i;
Edit[i]->OnClick = EditClick;
}
...
void __fastcall TForm1::EditClick(TObject *Sender)
{
TMyEdit *Edit = static_cast<TMyEdit*>(Sender);
EditNClick(Edit, Edit->ArrayIndex);
}
void __fastcall TForm1::EditNClick(TEdit *Sender, int index)
{
Sender->Text = _D("Enter some value in the ") + String(index) + _D(" box");
}