1

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

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

如果您不考虑每个细节,“黑客”解决方案很简单:只需从单元格中获取值,并且由于 OnKeyPress 事件带有一个Key参数,将该值附加到末尾 - 现在您有了当前值细胞!

错误的。如果用户选择了单元格中的所有文本(即:“foo”)并且他们现在正在输入“b”,该怎么办。由于他们选择了文本,它将被删除并替换为字母“b”。但是,单元格的值在 OnKeyPress 中仍会显示为“foo”,而Key的值将是 'b',因此上述逻辑会导致应用程序得出该单元格现在包含“foob”的结论,我们知道这一点不是真的。

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

4

1 回答 1

5

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

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

顺便说一句,这些事件应该在网格控件响应这些事件之前发生是很自然的,这样您就可以在它们到达控件之前有效地“过滤”这些事件,例如防止特定的键盘输入影响一个单元格的值。

于 2010-04-07T04:24:10.477 回答