使用 TDBGrid 的 OnDblClick 事件時,我如何知道雙擊了哪一列?
使用 OnCellClick 很容易,因為它有一個 TColumn 引數,但在 OnDblClick 上沒有。
uj5u.com熱心網友回復:
該OnDblClick事件不會為您提供有關單擊的任何資訊,尤其是執行單擊的位置,更不用說單擊了哪個網格單元格。因此,您必須手動確定該資訊。
試試這個:
Mouse.CursorPos通過傳遞到網格中獲取當前滑鼠位置TDBGrid.ScreenToClient()- 然后,用于
TDBGrid.MouseCoord()確定滑鼠下方單元格的行/列索引。 - 然后,檢查單元格行/列是否對應于資料單元格,如果是,則使用該
TDBGrid.SelectedIndex屬性來索引該TDBGrid.Columns屬性。
TDBGrid這與觸發事件時在內部執行的操作基本相同OnCellClick,只是它在回應MouseUp事件時執行此操作,該事件在網格內提供滑鼠坐標,因此跳過了上面的第一步。
例如:
type
TDBGridAccess = class(TDBGrid)
end;
procedure TMyForm1.DBGrid1DblClick(Sender: TObject);
var
TitleOffset: Byte;
Pt: TPoint;
Cell: TGridCoord;
Column: TColumn;
begin
TitleOffset := Ord(dgTitles in DBGrid1.Options);
Pt := DBGrid1.ScreenToClient(Mouse.CursorPos);
Cell := DBGrid1.MouseCoord(Pt.X, Pt.Y);
if (Cell.X >= TDBGridAccess(DBGrid1).IndicatorOffset) and (Cell.Y >= TitleOffset) then
begin
Column := DBGrid1.Columns[DBGrid1.SelectedIndex];
// use Column as needed...
end;
end;
更新:根據@UweRaabe 的評論,您應該可以TDBGrid.SelectedIndex自己使用:
procedure TMyForm1.DBGrid1DblClick(Sender: TObject);
var
Index: Integer;
Column: TColumn;
begin
Index := DBGrid1.SelectedIndex;
if (Index <> -1) then
begin
Column := DBGrid1.Columns[Index];
// use Column as needed...
end;
end;
uj5u.com熱心網友回復:
在TDBGrid.OnDblClick期間,資料集定位到單擊的記錄,并且可以使用TDBGrid.SelectedIndex屬性檢索列。如果您對底層資料集欄位感興趣,可以使用TDBGrid.SelectedField直接訪問它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/463000.html
上一篇:hive的磁區策略
