Форум — Ответы ( К темам )
? | mal: Как передать по ссылке объект типа TEdit? (27-03-2003 00:03:45) |
Ситуация: На форме есть несколько полей редактирования типа TEDit. При вводе в них данных необходимо выполнять проверку введенных значений определенным условиям. При попытке передать в функцию-тестер ссылки на объект TEdit компилятор выдает ошибку! Пример кода: void __fastcall TCalc::Bee5ColChange(TObject *Sender) { TestCol(Bee5Col); } В заголовочном файле объявлено: void __fastcall TestCol(TEdit); Сообщение об ошибке: [C++ Error] Calc.cpp(21): E2459 VCL style classes must be constructed using operator new | |
Георгий (27-03-2003 00:14:21) | |
ты передаёшь в эту ф-цию не ссылку на обьект, а копию надо писать так: void __fastcall TestCol(TEdit*); или void __fastcall TestCol(TEdit&); т.е. передавать или указатель или ссылку | |
Павел (27-03-2003 14:31:08) | |
А кроме того, если обработка идет в стандартном обрабочике события, можете использовать указатель Sender на объект. в котором произошло событие (не забыв привеети его к реальному типу объекта) например, для всех Edit-ов на форме указать один обработчик события: void __fastcall TForm1::Edit1Change(TObject *Sender) { Label1->Caption = ((TEdit*)Sender)->Text; } | |
Георгий (27-03-2003 17:56:03) | |
Павел: "((TEdit*)Sender)" — это очень опасное преобразование — лучше так TEdit *ptrEdit; ptrEdit=dynamic_cast<TEdit*>(Sender); if (ptrEdit) Label1->Caption=ptrEdit->Text; | |
mal (27-03-2003 23:08:39) | |
Спасибо!!! Только вариант void __fastcall TestCol(TEdit&); почему-то работать не хочет — компилятор ругается, а void __fastcall TestCol(TEdit*); компилируется нормально. | |
denver (02-05-2003 11:11:31) | |
народ, объясните, пожалуйста, зачем передавать в функцию-обработчик ВЕСЬ компонент TEdit? не эффективнее ли передавать, скажем, Edit1->Text и принимать в обработчике строку? |