有关TreeView的一个问题 (100分)

  • 主题发起人 主题发起人 pipi_lu
  • 开始时间 开始时间
P

pipi_lu

Unregistered / Unconfirmed
GUEST, unregistred user!
TreeView有一个特性,当右键按下时,右键所在Node会选中,但右键一放开,选中的节点又会回到原来位置.但是我想知道右键按下时是哪个节点,应该怎么做?
(曾尝试过用OnChanging事件,发觉右键不会触发该事件,另外尝试过OnMouseDown事件,发现在MouseUp时才响应事件,很苦恼,请大侠指点)
 
Right Select
 
嗯....用个Timer定时查询鼠标状态吧。
 
这样资源太占用了吧
 
那就在OnCustomDrawItem里判断鼠标右键
 
to Another_eYes:
我试了你的方法,为什么我右键点击原选中node下的节点,可以得到右键所点击node的caption,但点原选中node上的节点就不行了.我曾经在OnGetSelectedIndex里也是这样.
 
很简单, 因为点在原node上没有引起TreeView重画。 所以不会触发 OnCustomDrawItem.
同理也适用于OnGeSelectedIndex
 
是我说得不清楚.我是说点击原选中节点以上的节点,就不行了
如:
-a
-b
-c
b是原来选中的节点,我在OnGeSelectedIndex事件里把node.caption赋值给一个edit控件
我右键点击c,可以得到c,而点击a,却得到b,为什么?
 
不会吧,你自己设置节点seleted好了。
 
to yeath:
我试过的,不行的.节点的selected应该没有关系吧
 
在TreeView的mousedown事件里,加下面的代码:
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Node:TTreeNode;
begin
if (Button=mbRight) then
begin
Node := TreeView1.GetNodeAt(x,y);
if Node<>nil then
begin
Node.Selected := true;
end;
end;
end;
 
应该可以吧,记得加分哦。
 
to yeath:
Thank You!
问题已解决.
我现在才知道有GetNodeAt(x,y);方法
 
后退
顶部