delphi – 如何检测用户何时完成编辑TStringGrid单元格?

前端之家收集整理的这篇文章主要介绍了delphi – 如何检测用户何时完成编辑TStringGrid单元格?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
用户完成输入数据时,我希望在字符串网格中返回单元格的内容.用户键盘上的回车键完成,或者单击或双击另一个单元格.

在拉撒路有一个FinishedCellEditing的方法,但不是在Delphi中.如何在Delphi中检测它?

解决方法

我有相同的问题,但更容易的解决方案,因为我强迫用户按Enter键…

诀窍:在编辑时,我不会让用户更改为另一个单元格,所以我迫使用户必须按简介/ 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’时.

猜你在找的Delphi相关文章