編碼,附加一個的OnKeyPress事件處理程序,以一個TStringGrid:德爾福 - 的OnKeyPress前TStringGrid更新單元與新的人物出現在Delphi
用戶正在輸入到網格單元前的OnKeyPress事件觸發實際上已經更新了其價值與被按下的鍵。這顯然是一個問題,當我想知道該單元格的內容是在這個時候,因爲用戶修改它。
的「黑客」辦法很簡單,如果你不考慮每一個細節:剛剛抓住從單元格的值,並且由於事件的OnKeyPress用重點參數走來,該值追加到尾部 - 現在你擁有了手機的當前價值!
錯誤。如果用戶選擇了單元格中的所有文本(即:「foo」)並且他們現在正在鍵入'b',該怎麼辦?由於他們選擇了文本,它將被刪除並替換爲字母'b'。但是,單元格的值在OnKeyPress中仍將顯示爲「foo」,並且鍵值的值將爲'b',因此上述邏輯將導致應用程序斷定單元格現在包含「foob」,其中我們知道是不正確的。
所以,有誰知道如何解決這個問題?有沒有辦法讓OnKeyPress在之後反應網格的內容已經更新,或者也許是在處理程序開始時強制更新的方式?我在這裏拼命地避免使用OnKeyUp事件,所以除此之外的任何建議都將不勝感激。
你爲什麼「拼命地避免使用OnKeyUp事件」? – 2010-04-07 02:03:50
OnKeyPress在控件處理完密鑰並相應地更新其內容之前觸發。如果需要,應用程序的代碼可以事先拒絕密鑰。 – 2010-04-07 07:31:56
@雷米:是的,Deltics已經向我解釋過,並且還提供了答案。 @Mason:OnKeyUp可以觀察所有按鍵,而不僅僅是ASCII按鍵,而且這是很多不必要的努力來過濾掉我不想要的東西。我有使用OnKeyUp的問題(例如,當KeyDown在不同的組件上時捕獲KeyUp - 這是不受歡迎的),這就是爲什麼我重構使用OnKeyPress,所以返回並再次使用它* 。 ** OnSetEditText **應該完全適合我。 – JMTyler 2010-04-07 16:49:23