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’时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |