Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
我將DBGrid相關聯的tTable.DesableControls設為enable後在dBGrid上用mouse click 竟然也能改變tTable cursor的位置你說奇怪不奇怪!
Is this a bug?
不只是 DbGrid, DBNavigator 也是一樣的, 但是我想這應該不是Bug 吧
查 VCL 原始碼, TDbGrid 的父類別 TCustomDBGrid.MouseDown()中呼叫了: FDatalink.Dataset.MoveBy(Y - Row); 因此記錄位置更動
呼叫 TTable.DisableControls 方法, 暫時切斷了 DataSet 與DataSource 的連結, DataSource 感應不到任何 DataSet 的狀態.訊息與事件分派, 自然各個 Data-Aware 元件就暫時不對資料位置與內容反應,不作重新顯示的處理,執行速度就比較快了,這也就是在搜尋或批次處理時常先呼叫 DisableControls, 待處理後再以 EnableControls 還原的原因, 我也常看到以 try敘述保固以使 EnableControls 一定可以執行到的寫法.
但是對這些 Data-Aware 元件而言, 不反應並不表示資料內容與記錄位置不能變化(它只是不反應而已), 如果呼叫了Dataset的 DisableControls 方法後, 透過元件的方法不能異動資料庫的內容, 依我看才是 Bug, 您提出的問題中, DBGrid 當時並不是 Disabled, 因此它的 MouseDown 應該還是有效的吧!
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |