OnKeyPress在TStringGrid使用新字符更新单元格之前发生

在Delphi中编写代码,将OnKeyPress事件处理程序附加到TStringGrid中:

OnKeyPress事件在用户输入的网格单元格之前触发,实际上已使用已按下的键更新其值。 这显然是一个问题,当我想知道这个单元格的内容是什么时,就像用户修改它一样。

如果你没有考虑每一个细节,那么“被黑”解决方案很简单:只需从单元格中获取值,并且由于OnKeyPress事件伴随着Key参数,所以将该值附加到最后 - 现在您拥有当前值的细胞!

假。 如果用户选择了单元格中的所有文本(即:“foo”)并且他们现在正在键入'b',该怎么办? 由于他们选择了文本,它将被删除并替换为字母'b'。 但是,单元格的值在OnKeyPress中仍然显示为“foo”,并且Key的值为'b',因此上述逻辑将导致应用程序断定单元现在包含我们知道的“foob”是不正确的。

所以。 有人知道如何解决这个问题吗? 有没有办法让OnKeyPress在网格内容更新后作出反应,或者可能是在处理程序开始时强制更新的方法? 我在这里拼命地避免使用OnKeyUp事件,所以除此之外的任何建议都将不胜感激。


如果您希望响应单元格值的更改,为什么不使用OnSetEditText事件?

键盘事件用于响应键盘输入,而不是对该输入的控制响应。 控件通常会提供一个或多个附加事件以允许应用程序响应某些输入的控件响应 - 在这种情况下,键盘输入会导致单元格值被修改,而不是单元格选择的更改,例如。

顺便说一句,在电网控制响应这些事件之前应该发生这些事件是非常自然的,以便您可以在这些事件到达控制之前有效地“过滤”这些事件,例如以防止特定的键盘输入影响细胞的价值。

链接地址: http://www.djcxy.com/p/50623.html

上一篇: OnKeyPress occurs before TStringGrid updates cell with new character

下一篇: Widget that calls speech recognition app