社区
Delphi
帖子详情
求关于treeview控件拖动节点的教程!!!!!!!!???????
autocar
2003-04-19 08:07:13
求关于treeview控件拖动节点的教程
包括
1, 怎样子节点拖动到另一 父节点中,
2.怎样动态添加节点和删除节点,
3,和怎样判断鼠标点击的是treeview控件空白处或是节点???
谢谢!!
--
...全文
68
1
打赏
收藏
求关于treeview控件拖动节点的教程!!!!!!!!???????
求关于treeview控件拖动节点的教程 包括 1, 怎样子节点拖动到另一 父节点中, 2.怎样动态添加节点和删除节点, 3,和怎样判断鼠标点击的是treeview控件空白处或是节点??? 谢谢!! --
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
火龙岛主
2003-04-26
打赏
举报
回复
一. 如何初始化一个TreeView?
弄一个窗口,放上一个TreeView和一个Button,分别取名为TV1和Btn1。如果需要
在每个节点前有个图,请在窗口上放上一个ImageList,取名为ImageList1,双击
它,加入六个图标。还要记得记得将TV1的Images属性改为ImageList1噢。双击按
钮Btn1,在里面填入以下代码,然后按F9运行,点击Btn1就可以看到效果了。
procedure TForm1.Btn1Click(Sender: TObject);
Const
MyDocDir = 'C:\My Documents';
PersonDir = '3hSoft';
Var
Var
I : Word;
SubNodeName : array [1..5] of ShortString;
RootNode, SubNode : TTreeNode;
P : PString;
begin
SubNodeName[1] := '便笺';
SubNodeName[2] := '发件箱';
SubNodeName[3] := '联系人';
SubNodeName[4] := '任务';
SubNodeName[5] := '日记';
TV1.Items.Clear;
TV1.Items.BeginUpdate;
New(P);
P^ := MyDocDir + '\' + PersonDir;
RootNode := TV1.Items.AddObject(Nil, '个人文件夹', P);
// 此 Node 的图标已对 Images 属性中取第 0 个了。
For I := 1 to 5 do
begin
New(P);
P^ := MyDocDir + '\' + PersonDir + '\' + SubNodeName[I];
SubNode := TV1.Items.AddChildObject(RootNode, SubNodeName[I], P)
;
;
// 如果不想使用图标的话请删除以下两行
SubNode.ImageIndex := I;
SubNode.SelectedIndex := I;
end;
TV1.Items.EndUpdate;
end;
二.在TreeView中如何设置选中结点
var
i:integer; {i为设置的选中结点的索引值}
begin
if i>treeview1.items.count then
treeview1.items[i].selected:=true;
或
treeview1.selected:=treeview1.items[i];
三。设置TreeView结点的图形
1. 设置TreeView的images属性为已存在的images对象
treeview1.images:=imagelist1;
2. 在加入结点后执行:
var
anode:TTreeNode;
begein
anode:=Treeview1.add(nil,'item1');
anode.imageindex:=0; {结点未选中时显示的图标}
anode.selectedindex:=1; {结点选中时显示的图标}
end
3. 如果结点图形在改变后未发生变化,可以执行:
treeview1.refresh;
四。如何批量处理TreeView结点
使用TreeView的items属性的BeginUpdate和EndUpdate方法,例:
TreeView1.items.BeginUpdate;
for i:=0 to TreeView1.items.count-1 do
begin
//将每个结点的文字改成为小写字母
TreeView1.items[i].text:=lowercase(TreeView1.items[i].text);
end;
TreeView1.items.EndUpdate;
五。实现TreeView结点拖拽的实例
下面的程序片段演示了如何实现拖拽treeview构件结点的例子
{鼠标按下时执行的语句}
procedure TForm1.Treeview1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
{判断左键按下并且鼠标点在一个结点上开始实现拖拽}
if ( Button = mbLeft ) and
( htOnItem in Treeview1.GetHitTestInfoAt( X, Y ) ) then
begin
Treeview1.BeginDrag( False );
end;
end;
{鼠标拖动执行语句}
procedure TForm1.Treeview1DragOver( Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
var
Node : TTreeNode;
begin
if Source = Treeview1 then
begin
Node := Treeview1.GetNodeAt( X, Y ); {取当前结点}
if Node <> nil then {当前结点不为空才能实现拖拽,accept:=true}
Accept := true;
end;
end;
{鼠标释放时执行的语句}
procedure TForm1.Treeview1DragDrop( Sender, Source: TObject;
X, Y : Integer );
var
TempNode : TTreeNode;
AttachMode : TNodeAttachMode;
begin
if Treeview1.Selected = nil then
Exit;
AttachMode := naAddChild; {设置结点移动模式,设移动结点为子结点}
{ 注意在这里存在一个bug,当移动结点时,如果目标结点没有子结点,}
{ 则加入的新的子结点会失败,所以先在当前目标结点的下面 }
{ 加入一个临时子结点,移动完毕后,再将临时结点删除 }
Treeview1.Items.BeginUpdate;
try
TempNode := Treeview1.Items.AddChild( Treeview1.DropTarget,
'Temp' );
try
{ 移动选中的结点到目标结点 }
Treeview1.Selected.MoveTo( Treeview1.DropTarget, AttachMode );
finally
TempNode.Free; { 不要忘了释放临时结点 }
end;
finally
Treeview1.Items.EndUpdate;
end;
end;
WPF
TreeView
拖拽
节点
变换位置
WPF
TreeView
拖拽
节点
变换位置
C# WinForm中拖拽
TreeView
节点
C# WinForm中拖拽
TreeView
节点
TreeView
控件
的
节点
拖动
vs2005,vs2008软件都可打开 能对
Treeview
控件
的结点进行双击编辑
Treeview
之间的结点可以相互
拖动
,并自动更改名字 如果
拖动
错误,可以撤销还原为原来的状态
VB中
Treeview
树形菜单
节点
拖动
、增加、删除实例
VB中
Treeview
树形菜单
节点
拖动
、增加、删除实例。
PB中
TREEVIEW
控件
的使用技巧
适合于初学者的学习资料
Delphi
5,939
社区成员
262,944
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章