delphi TreeView 鼠标右击选择节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi TreeView 鼠标右击选择节点相关的知识,希望对你有一定的参考价值。

TreeView树形目录!当鼠标右击某个节点时,弹出一个PopMenu的下来菜单!这是如何让被右击的节点同时被高亮选择呢!比如我选择的是A节点!A节点高亮显示!这时突然在B节点处鼠标右击!可是A仍然高亮显示被选择!只是B节点右侧弹出了PopMenu!我想让鼠标右击的同时B节点既被高亮选择又弹出PopMenu

尝试在Treeview中用右键弹出PopupMenu的同时,也实现左键焦点效果,用了treeview的自带属性RightClickSelect为true一点效果都没有,
后来
响应OnMouseDown事件
if Button=mbRight then TreeView1.Selected :=TreeView1.GetNodeAt(X,Y);依然不能完美解决(要点2次右键);
最后
在PopupMenu的OnPopup消息里强制发送左键消息才完美解决。
procedure TFrmMain.PopupMenu1Popup(Sender: TObject);
var
pt: TPoint;
l_lPARAM :LPARAM;
begin
//if Sender = PopupMenu1 then showmessage('抓到Sender');
GetCursorPos(pt); 这是获取的相对于屏幕的坐标
pt := ScreenToClient(pt); 转换成本地坐标
//ShowMessageFmt('API 函数 GetCursorPos: x=%d; y=%d', [pt.X, pt.Y]);
l_Lparam := pt.x + (pt.y shl 16);//l_lPARAM :LPARAM;
Sendmessage(TreeView1.Handle,WM_LBUTTONDOWN ,MK_LBUTTON,L_lparam);
Sendmessage(TreeView1.Handle,WM_LBUTTONUP ,MK_LBUTTON,L_lparam);
end;
这个才是完美解决办法。
参考技术A 在 TREEVIEW的两个鼠标事件里写:
procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
PopupMenu1.Popup(X,Y);
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then
TTreeView(Sender).GetNodeAt(X,Y).Selected := True;
end;

OK,祝你好运!本回答被提问者采纳

C#动态给treeview控件添加节点和子节点

在程序运行的时候,点击一个按钮添加,主要是子节点怎么添加

如图,添加根节点可以添加,可是子节点去不知道怎么添加
我在添加子节点的时候,用鼠标单击了一个节点,我怎样才能知道是那个节点呢?怎么让程序知道该在那个里添加呢?

很简单,你的问题已经隐藏在你的疑惑的地方了
treeview 鼠标点击一个节点,那么这个节点是处于选中状态的,它会有明显的蓝色背景,而且只有一个处于选中状态
treeview.SelectNode 就是选中的节点
此为方法一
方法二:设置treeview 有一个属性,是否显示复选框,好像叫做ShowCheckBox 设置为true,你每次勾选节点前面的复选框,然后怎么判断是否选中呢?
循环所有根节点 foreach node in root.childnode
if(node.Checked)
//这个node就是你需要在下面添加子节点的节点

分清楚selected 和checked 就可以帮你解决你疑惑的地方
参考技术A TreeNode RootNode=new TreeNode();
this.treeView1.Nodes.Add(RootNode);
就这样加根节点,子节点也是同样方法。

语句: ParentNode.ChildNodes.Add(ChildNode);

其中:
ParentNode:父结点
ChildNodes:VS默认的父节点属性,用于获取父结点的第一级子节点
Add: VS默认的结点添加方法
ChildNode: 所要插入的子节点追问

我在添加子节点的时候,用鼠标单击了一个节点,我怎样才能知道是那个节点呢?

追答

其他网友已经给了你答案,我想你应该明白了O(∩_∩)O~

本回答被提问者采纳
参考技术B 用递归去实现就可以了 参考技术C 应该是控件new一个add添加

以上是关于delphi TreeView 鼠标右击选择节点的主要内容,如果未能解决你的问题,请参考以下文章

Delphi TreeView 问题

delphi treeview 控件的使用

Delphi TreeView 选择父节点,选择所有子节点

delphi中的treeview控件如何取到选择节点的索引号?

DELPHI TreeView,动态添加父节点,子节点

关于的Delphi 的treeview控件的用法请教大家