Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

OnChange - кто вызывает?   Найти похожие ветки 

 
chir   (2005-01-10 19:57) [0]

Форма. Во всех полях событие OnChange вызывает одну и ту же процедуру. Как какое поле именно вызвало процедуру? Желательно вывести в label просто имя объекта.

вот такая процедура:

procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
 RichEdit1.Lines.Add("cxPropertiesChange");
 ism := 1;
end;

О! можно и не в лэйбл, а в этотже RichEdit.


 
Rule ©   (2005-01-10 20:09) [1]

procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
RichEdit1.Lines.Add("cxPropertiesChange");
RichEdit1.Lines.Add(TYoutFieldType(Sender).name);
ism := 1;//  а это зачем ?
end;


где TYoutFieldType - тип твоего поля ...


 
DSKalugin ©   (2005-01-10 20:13) [2]

procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
label1.Caption:=(Sender as TEdit).Name;
RichEdit1.Lines.Add(label1.Caption);
ism := 1;
end;


 
chir   (2005-01-10 20:18) [3]

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:36) [4]

создай для каждого компонента свой личный обработчик OnChange вместо общего. Тогда проблема будет решена.
Я в примере исходил из того, что меняется содержимое компонента TEdit

TYoutFieldType - тип твоего поля ... как уже сказали
т.е Sender.ClassName  имя класса я так понимаю это
TcxTextEdit, TcxPopupEdit и т.д.


 
chir   (2005-01-10 20:44) [5]

эх... я только только избавился от индивидуальных обработчиков... не возврат к куче обработчиков - не выход...


 
Desdechado ©   (2005-01-10 20:53) [6]

если поля прошиты в коде, то можешь просто сравнивать
if( Sender = fld ) then ...


 
sniknik ©   (2005-01-10 21:01) [7]

TControl(Sender).Name


 
chir   (2005-01-10 21:19) [8]

TControl(Sender).Name - отлично работает!
спасибо!!! :)



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.068 c
8-1098588797
pika
2004-10-24 07:33
2005.02.06
это смешно но я запутался в Image :-)


1-1106295507
Poha
2005-01-21 11:18
2005.02.06
RichEdit


14-1105761120
Думкин
2005-01-15 06:52
2005.02.06
С Днем Рождения! 15 января


1-1106228405
Tomkat
2005-01-20 16:40
2005.02.06
Список параметров из INI файла


1-1106307685
slaga
2005-01-21 14:41
2005.02.06
Анализ работы программы ?