![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OnChange - кто вызывает? [D7]
chir © (2005-01-10 19:57:00)Форма. Во всех полях событие OnChange вызывает одну и ту же процедуру. Как какое поле именно вызвало процедуру? Желательно вывести в label просто имя объекта.
вот такая процедура:
procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
RichEdit1.Lines.Add('cxPropertiesChange');
ism := 1;
end;
О! можно и не в лэйбл, а в этотже RichEdit.
chir (2005-01-10 21:19:00) [1]TControl(Sender).Name - отлично работает!
спасибо!!! :)
sniknik (2005-01-10 21:01:00) [2]TControl(Sender).Name
Desdechado (2005-01-10 20:53:00) [3]если поля прошиты в коде, то можешь просто сравнивать
if( Sender = fld ) then ...
chir (2005-01-10 20:44:00) [4]эх... я только только избавился от индивидуальных обработчиков... не возврат к куче обработчиков - не выход...
DSKalugin (2005-01-10 20:36:00) [5]создай для каждого компонента свой личный обработчик OnChange вместо общего. Тогда проблема будет решена.
Я в примере исходил из того, что меняется содержимое компонента TEdit
TYoutFieldType - тип твоего поля ... как уже сказали
т.е Sender.ClassName имя класса я так понимаю это
TcxTextEdit, TcxPopupEdit и т.д.
chir (2005-01-10 20:18:00) [6]procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
RichEdit1.Lines.Add('cxPropertiesChange');
RichEdit1.Lines.Add('sender: '+Sender.ClassName); // Получил имя класса... уже лучше конечно, но этого очень мало...
ism := 1; // ради этого все и затевалось.
end;
В общем: форма личных данных сотрудников. Состоит из разных объектов (cxTextEdit, cxPopupEdit и т.д.). Слева список всех сотрудников. данные текущего сотрудника выводятся в форме. Если что-то в форме изменилось (срабатывает OnChange), то устанавливается ism:=1. В дальнейшем (например, при переходе на другого сотрудника) в зависимости от ism формируется запрос UPDATE...
Проблема: сейчас почему-то даже просто при просмотре данных где-то срабатывает OnChange. Не могу найти где.
ps. чтобы не срабатывал OnChange при выборе другого сотрудника использую такую технологию:
cxTE_surname.Properties.OnChange := nil;
cxTE_surname.Text := DM.ADOQ2.FieldValues['surname'];
cxTE_surname.Properties.OnChange := cxPropertiesChange;
=============
TYoutFieldType(Sender).name - можно объяснить что и как тут?...
DSKalugin (2005-01-10 20:13:00) [7]procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
label1.Caption:=(Sender as TEdit).Name;
RichEdit1.Lines.Add(label1.Caption);
ism := 1;
end;
Rule (2005-01-10 20:09:00) [8]
procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
RichEdit1.Lines.Add('cxPropertiesChange');
RichEdit1.Lines.Add(TYoutFieldType(Sender).name);
ism := 1;// а это зачем ?
end;
где TYoutFieldType - тип твоего поля ...