我有一個基於TStringGrid嚴重修改的控制。我想允許用戶在這個網格中進行選擇,但限制選擇一行(當前行)。TStringGrid髒黑客 - 限制選擇到一個單一的行
執行: 當用戶按下鼠標左鍵我正在使用一個骯髒的黑客:OnMouseDown事件捕獲鼠標光標,並將其保留在當前行。用戶可以在鼠標墊上上下移動鼠標,但光標不會上下移動。它將保持在當前行。當用戶釋放按鈕(OnMouseUp事件)時,我釋放捕獲。
但是,這個黑客正如我說的很髒。有幾個問題。例如,如果用戶按下鼠標左鍵(LMB),然後不釋放該按鈕,則會按下右按鈕,相關的彈出式菜單將彈出,但鼠標捕捉將永遠不會釋放。因此,鼠標將被鎖定在屏幕區域,直到用戶將有一個絕妙的想法再次點擊LMB來解鎖鼠標。這可能是D7中的一個錯誤。有一個單獨的帖子在這裏:TStringGrid - OnMouseUp is not called!
有一個優雅的方式來做到這一點?
編輯: OnSelectCell無法正常工作。單擊單元格時,OnSelectCell事件僅被調用一次。如果您按住按鈕並移動鼠標以擴展選擇,則不會再次調用OnSelectCell。 確實MoveCurrent只出現在TCustomGrid.MouseDown中。
不要限制鼠標移動!用戶會恨你並停止使用你的軟件。 – 2010-07-19 20:09:46