Treeview.DragMode:=dmAutomatic;
TreeView.DragKind:=dkDrag;ListView.OnDragOver:
begin
if Source is TTreeView then
Accept := true;
end;ListView.OnDragDrop:
var
tvSrc:TTreeView;
lvSdr:TListView;
NewItem:TListItem;
begin
tvSrc := Source as TTreeView;
lvSdr := Sender as TListView;
NewItem := lvSdr.Items.Add;
(*这时可以用lvSdr.Selected判断拖放到了ListView的哪一个节点上.以便于添加到正确的位置.*)
NewItem.Caption := tvSrc.Selected.Text;
//以及其它数据
//或遍历tvSrc.Selected的所有子节点,全添加进来.
tvSrc.Items.Delete(tvSrc.Selected);
//或者不删除
end;
TreeView.DragKind:=dkDrag;ListView.OnDragOver:
begin
if Source is TTreeView then
Accept := true;
end;ListView.OnDragDrop:
var
tvSrc:TTreeView;
lvSdr:TListView;
NewItem:TListItem;
begin
tvSrc := Source as TTreeView;
lvSdr := Sender as TListView;
NewItem := lvSdr.Items.Add;
(*这时可以用lvSdr.Selected判断拖放到了ListView的哪一个节点上.以便于添加到正确的位置.*)
NewItem.Caption := tvSrc.Selected.Text;
//以及其它数据
//或遍历tvSrc.Selected的所有子节点,全添加进来.
tvSrc.Items.Delete(tvSrc.Selected);
//或者不删除
end;
Treeview1.DragMode:=dmAutomatic;
第2步
定义一个全局变量DradStr
第3步
关于listbox1的ondragover事件
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if source=treeview1 then
DradStr:=TreeView1.Selected.Text;
end;
第4步
关于listbox1的ondrapdrop事件
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if source=treeview1 then
ListBox1.Items.Add(DradStr);
end;
OK了!
OnDragOver不变,OnDragDrop改为:
var
tvSrc:TTreeView;
lvSdr:TListBox;
begin
tvSrc := Source as TTreeView;
lvSdr := Sender as TListBox;
lvSdr.Items.Add(tvSrc.Selected.Text);
//用X和Y判断拖放到了ListView的哪一个节点上.
//以及其它数据
//或遍历tvSrc.Selected的所有子节点,全添加进来.
tvSrc.Items.Delete(tvSrc.Selected);
//或者不删除
end;
if Source is TTreeView then
Accept := true
else
Accept := false;