当使用OnDblClick事件的TDBGrid时,我如何知道哪个列是双击的?
对于OnCellClick来说,这很容易,因为它有一个TColumn参数,但在OnDblClick上没有。
发布于 2022-04-22 18:03:44
OnDblClick
事件不会为您提供任何有关单击的信息,尤其是单击的位置,更不用说单击哪个网格单元格了。因此,您必须手动确定该信息。
试试这个:
TDBGrid.ScreenToClient()
Mouse.CursorPos
传递给Mouse.CursorPos
以确定鼠标下方单元格的行/列索引,从而获得网格中的当前鼠标位置。TDBGrid.SelectedIndex
属性索引TDBGrid.Columns
属性。F 213
这与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;
发布于 2022-04-22 20:48:17
在TDBGrid.OnDblClick期间,dataset定位到单击的记录,可以使用TDBGrid.SelectedIndex属性检索列。如果您对基础数据集字段感兴趣,可以使用TDBGrid.SelectedField直接访问它。
https://stackoverflow.com/questions/71972640
复制相似问题