您现在的位置:首页 >> VCL >> VCL >> 内容

Delphi中如何实现TreeView的双击事件先于展开事件发生

时间:2011/9/3 16:24:56 点击:

  核心提示:进入正题,其实我并不是真的把双击事件提前了,而只是通过一个小技巧,让它“好像首先发生”而已。节点展开不外乎是两种方法,一种是点那个十字,一个是双击节点标题。因此,我们可以想办法通过人为控制,把展开的实...
进入正题,其实我并不是真的把双击事件提前了,而只是通过一个小技巧,让它“好像首先发生”而已。节点展开不外乎是两种方法,一种是点那个十字,一个是双击节点标题。因此,我们可以想办法通过人为控制,把展开的实际操作进行延迟。我们需要一个标记的属性:IsTreeViewManualExpanding来记录这个状态,请看以下代码:   procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); var  P: TPoint; begin  P := TreeView1.ScreenToClient(Mouse.CursorPos);  if (htOnLabel in FTreeView.GetHitTestInfoAt(P.X, P.Y)) and (not IsTreeViewManualExpanding) then  begin   // 如果展开时鼠标点在了标题上,说明是双击展开的,进行人工控制   IsTreeViewManualExpanding := true;   AllowExpansion := false;  end; end;   procedure TForm1.TreeView1DblClick(Sender: TObject); var  P: TPoint;  ANode : TTreeNode; begin  P := TreeView1.ScreenToClient(Mouse.CursorPos);  ANode := TreeView1.GetNodeAt(P.X, P.Y);  if ANode <> nil then  begin   // ------------------------------   // 这里写你要进行的节点操作   // ------------------------------   if IsTreeViewManualExpanding then   begin    // 手动展开节点    ANode.Expand(false);    IsTreeViewManualExpanding := false;   end;  end; end;

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号