微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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’时.

原文地址:https://www.jb51.cc/delphi/101431.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐