首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得TDBGrid.DblClick上单击的列(发件人: TObject)?

如何获得TDBGrid.DblClick上单击的列(发件人: TObject)?
EN

Stack Overflow用户
提问于 2022-04-22 17:34:02
回答 2查看 506关注 0票数 0

当使用OnDblClick事件的TDBGrid时,我如何知道哪个列是双击的?

对于OnCellClick来说,这很容易,因为它有一个TColumn参数,但在OnDblClick上没有。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-22 18:03:44

OnDblClick事件不会为您提供任何有关单击的信息,尤其是单击的位置,更不用说单击哪个网格单元格了。因此,您必须手动确定该信息。

试试这个:

TDBGrid.ScreenToClient()

  • Then,
  • 通过将Mouse.CursorPos传递给Mouse.CursorPos以确定鼠标下方单元格的行/列索引,从而获得网格中的当前鼠标位置。
  • 然后,检查单元格行/列是否与数据单元格相对应,如果符合,则使用TDBGrid.SelectedIndex属性索引TDBGrid.Columns属性。

F 213

这与TDBGrid在触发OnCellClick事件时在内部所做的基本相同,但它只是响应于MouseUp事件,该事件提供了网格中的鼠标坐标,从而跳过了上面的第一步。

例如:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2022-04-22 20:48:17

在TDBGrid.OnDblClick期间,dataset定位到单击的记录,可以使用TDBGrid.SelectedIndex属性检索列。如果您对基础数据集字段感兴趣,可以使用TDBGrid.SelectedField直接访问它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71972640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档