在拉撒路有一个FinishedCellEditing的方法,但不是在Delphi中.如何在Delphi中检测它?
解决方法
诀窍:在编辑时,我不会让用户更改为另一个单元格,所以我迫使用户必须按简介/ Enter才能结束编辑,然后我允许更改为其他单元格.
不好的部分是OnKeyPress发生在OnSetEditText之前,所以我试着用OnKeyUp …
而我发现只是在编辑单元格后,按Enter / Intro,OnKeyUp不会触发…这是VCL上的一个BUG …一个键已被释放,OnKeyUp尚未被触发.
所以,我做另一个技巧绕过这个…使用一个计时器来区分我会做什么只是一点点,所以我让时间事件OnSetEditText被触发.
让我解释一下我为成功而做的事情
我已经锁定选择另一个单元格,将代码放在OnSelectCell上,与此类似:
CanSelect:=Not UserIsEditingOneCell;
在OnSetEditText上,我将代码放在这里:
UserIsEditingOneCell:=True;
所以现在需要的是检测用户按Enter / Intro …的时间,我发现一个可怕的事情,因为我说… OnKeyUp不会被解雇这样的钥匙…所以,我会模拟,通过使用一个定时器和使用OnKeyPress,因为OnKeyPress被触发,但OnKeyUp不,为Enter键…
所以,在OnKeyPress上,我把这样的东西:
TheTimerThatIndicatesUserHasPressEnter.Interval:=1; // As soon as posible TheTimerThatIndicatesUserHasPressEnter.Enabled:=True; // But after event OnSetEditText is fired,so not jsut now,let some time pass
这样的定时器事件:
UserIsEditingOneCell:=False; // Do whatever needed just after the user has finished editing a cell
这样做,但是我知道这是可怕的,因为我需要使用一个计时器…但是我不知道更好的方式…因为我不需要让用户去另一个单元格,而一个是edinting不是有一个有效的价值…我可以使用它.
为什么在地狱上没有像OnEndingEditing这样的事件?
P.D .:我也注意到OnSetEditText被激发了多次,每个被按下的键,并在Value参数…上使用不同的值,至少在使用在OnGetEditMask事件上设置的EditMask值’00:00:00’时.