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

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

(最好有代码,正确的一定加分)
...全文
52 20 打赏 收藏 转发到动态 举报
写回复
用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,388

社区成员

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

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