listview的问题!谁能帮帮我???

smallyan 2003-09-27 02:34:27
原listview为
111111
222222
333333
444444
555555
用鼠标左键托运后,变为
111111
222222 444444
333333
555555
也就是说把444444的变成了222222的子项

(最好有代码,正确的一定加分)
...全文
103 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wweijie 2003-09-28
  • 打赏
  • 举报
回复
ListView不能显示树结构的,你可以选用第三方控件,比如Dev Express的DxTreeList实现你的功能很容易
CDSoftwareWj 2003-09-28
  • 打赏
  • 举报
回复
同理吧 hehe^^ 要用ListView,我可没有现成的代码也没有时间写

你可以根据这个原理自己写 ListView也是Node只不过子节点在主节点的后面显示吧了
smallyan 2003-09-28
  • 打赏
  • 举报
回复
CDSoftwareWj(95927)

仔细看了一下,你那个是TREEVIEW的
delphipan 2003-09-27
  • 打赏
  • 举报
回复
学习
webfly 2003-09-27
  • 打赏
  • 举报
回复
学习
CDSoftwareWj 2003-09-27
  • 打赏
  • 举报
回复
作  者: smallyan (蓝色风筝)

回复人: haike_911(红客) ( ) 信誉:100 2003-09-27 17:18:00 得分:0

试试,成功明天结!

------------------------------


有鬼呀~~~~!!!!!!

haike_911 2003-09-27
  • 打赏
  • 举报
回复
试试,成功明天结!
CDSoftwareWj 2003-09-27
  • 打赏
  • 举报
回复
80分太少了点吧 hehe^^

btnMode 是个SpeedButton , tbsCheck类型

为的是控制把这个节点加到什么位置

上面的程序不用再给你写注解了吧,不难自己看看吧
CDSoftwareWj 2003-09-27
  • 打赏
  • 举报
回复
procedure TMainForm.CopyNode(DNode, SNode: TTreeNode);
var
ANode, NextNode : TTreeNode;
Owner : TTreeView;
SLevel, DLevel :Integer;
begin
Owner := DNode.TreeView as TTreeView;
with Owner do
begin
if not DNode.HasAsParent(SNode) then
begin
try
try
Items.BeginUpdate;
NextNode:=Items.AddChild(DNode,SNode.Text);
NextNode.Assign(SNode);
ANode:=SNode.GetNext;
SLevel:=SNode.Level;
DLevel:=DNode.Level + 1;

while ANode.Level>SNode.Level do
begin
if(ANode.Level-SLevel)=(NextNode.Level-DLevel)then
begin
NextNode:=Items.AddChild(NextNode.Parent,
ANode.Text);
NextNode.Assign(ANode);
end
else if(ANode.Level-SLevel)>
(NextNode.Level-DLevel) then
begin
NextNode:=Items.AddChild(NextNode,ANode.Text);
NextNode.Assign(ANode);
end
else if(ANode.Level-SLevel)<
(NextNode.Level-DLevel)then
begin
while(NextNode.Level-DLevel)>
(ANode.Level-SLevel)do
NextNode := NextNode.Parent;
NextNode:=
Items.AddChild(NextNode.Parent,ANode.Text);
NextNode.Assign(ANode);
end;
ANode := ANode.GetNext;
if not Assigned(ANode) then Break;
Application.ProcessMessages;
end;

finally
Items.EndUpdate;
end;
except
// force repaint on exception
(Owner as TWinControl).Invalidate;
raise;
end;
end
else
Application.MessageBox('不能copy到子节点', '错误',
MB_OK + MB_DEFBUTTON1);
end;
end;


用时

procedure TMainForm.TreeViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
tSrcNode ,tDesNode: TTreeNode;
tSrcID ,tDesID: Integer;
sSql: String ;
lSrcItem: TListItem;
begin
tSrcID := 0 ;tDesID := 0;
tDesNode := TTreeview(Sender).GetNodeAt(X,Y);
if Source is TTreeview then
begin
tSrcNode := TTreeview(Source).Selected;
if btnMode.Down then
tSrcNode.Moveto(tDesNode, naInsert)
else
tSrcNode.MoveTo(tDesNode, naAddChild);
end
end;
tw_cshn 2003-09-27
  • 打赏
  • 举报
回复
比较难
bluenightsky 2003-09-27
  • 打赏
  • 举报
回复
路过
smallyan 2003-09-27
  • 打赏
  • 举报
回复
因为商品分类层数太多,且顾客要求尽量能和管家婆的操作差不多!
LISTVIEW表中即有商品类别,也有商品名称,需要在同一LISTVIEW中打开下一层的窗体,并显示下一层的商品类别和商品名称!!
(说来说去, 有点表达不清,如果用过管家婆就熟悉点了)

大家还是帮我想想吧,谢谢!
只要能把选中的项目托到另外一个的子项目下,也就成功了
first_lover 2003-09-27
  • 打赏
  • 举报
回复
为什么不用TREEVIEW呢?
说实话,不太明白你的意思,没表述清楚
smallyan 2003-09-27
  • 打赏
  • 举报
回复
打错了,
是 托动 !!!!
zhangheaaa 2003-09-27
  • 打赏
  • 举报
回复
建议用stringgrid组件做,
stringgrid1.MouseToCell();可以把一个X,Y坐标定位到单元格.
hkbarton 2003-09-27
  • 打赏
  • 举报
回复
托运 就是拖动吗?
smallyan 2003-09-27
  • 打赏
  • 举报
回复
谢谢哦!
FrameSniper 2003-09-27
  • 打赏
  • 举报
回复
好难啊,偶帮你做一个派生的,等....
IORILI 2003-09-27
  • 打赏
  • 举报
回复
不会,帮你up
lxhong1980 2003-09-27
  • 打赏
  • 举报
回复
什么意思啊

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧