Delphi 将ListBoxItems及其图像从ListBox1拖放到ListBox2,避免重复

Delphi 将ListBoxItems及其图像从ListBox1拖放到ListBox2,避免重复,delphi,drag-and-drop,listbox,firemonkey,listboxitem,Delphi,Drag And Drop,Listbox,Firemonkey,Listboxitem,我的代码正在运行,可以拖放,但我想添加的是将项目及其图像从ListBox1拖放到ListBox2。另外,当我想重新排列ListBox2中的项目时,它会复制而不删除上一个项目 或者,如果可能的话,我想知道如何通过双击将项目从ListBox1移动到ListBox2,无需拖放 我使用的是10.2版本 这是我的代码,如果有人能帮助我,我将不胜感激: type TListBoxItem = class(FMX.ListBox.TListBoxItem) private function Ge

我的代码正在运行,可以拖放,但我想添加的是将项目及其图像从ListBox1拖放到ListBox2。另外,当我想重新排列ListBox2中的项目时,它会复制而不删除上一个项目

或者,如果可能的话,我想知道如何通过双击将项目从ListBox1移动到ListBox2,无需拖放

我使用的是10.2版本

这是我的代码,如果有人能帮助我,我将不胜感激:

type
  TListBoxItem = class(FMX.ListBox.TListBoxItem)

private
    function GetData: String;
    procedure SetData(const Value: String);

published
    property Data:String Read GetData Write SetData;
end;

var
  Form13: TForm13;


procedure TForm13.ListBox3DragDrop(Sender: TObject; const Data: TDragObject;
  const Point: TPointF);

var
  T,D:TListBoxItem;

Begin
  ListBox3.ItemHeight:=81;
  ListBox3.Canvas.Font.Size:=20;


  T:= TListBoxItem.Create(nil);
  D:= TListBoxItem(Data.Source);

  T.Data:= D.Data;
  ListBox3.AddObject(T);    

end;

procedure TForm13.ListBox3DragOver(Sender: TObject; const Data: TDragObject;
  const Point: TPointF; var Operation: TDragOperation);
begin

 if (Sender is TListBoxItem) and (Data.Source is TListBoxItem) and (Sender is TImage)
    and Not (Sender = Data.Source)
    and  (TListBoxItem(Data.Source).Text<>'')
    then Operation:=TDragOperation.Move
    else Operation:=TDragOperation.None;

end;

{ TListBoxItem }

function TListBoxItem.GetData: String;
begin
  Result := Text;
end;

procedure TListBoxItem.SetData(const Value: String);
begin
  Text:=Value;
end;
类型
TListBoxItem=class(FMX.ListBox.TListBoxItem)
私有的
函数GetData:String;
过程设置数据(常量值:字符串);
出版
属性数据:字符串读取GetData写入SetData;
结束;
变量
表格13:TForm13;
过程TForm13.ListBox3DragDrop(发送方:ToObject;常量数据:TDragObject;
常数点:TPointF);
变量
T、 D:TListBoxItem;
开始
ListBox3.项目高度:=81;
ListBox3.Canvas.Font.Size:=20;
T:=TListBoxItem.Create(无);
D:=TListBoxItem(数据源);
T.数据:=D.数据;
ListBox3.AddObject(T);
结束;
过程TForm13.ListBox3DragOver(发送方:ToObject;常量数据:TDragObject;
常量点:TPointF;var操作:tdrag操作);
开始
if(发送方为TListBoxItem)和(Data.Source为TListBoxItem)和(发送方为TImage)
而不是(发送方=Data.Source)
和(TListBoxItem(Data.Source).Text“”)
然后操作:=TDragOperation.Move
else操作:=TDragOperation.None;
结束;
{TListBoxItem}
函数TListBoxItem.GetData:字符串;
开始
结果:=文本;
结束;
过程TListBoxItem.SetData(常量值:字符串);
开始
文本:=值;
结束;

将DblClick事件放在列表框1上,将所选项目的父项移动到另一个列表框

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  if ListBox1.Selected <> nil then
    ListBox1.Selected.Parent := ListBox2;
end;
过程TForm1.ListBox1DblClick(发送方:TObject);
开始
如果ListBox1.选择了nil,则
ListBox1.Selected.Parent:=ListBox2;
结束;

@Samar如果你仔细想想,我相信你明白为什么……它不起作用。。。是最无用的字串之一。所以,请添加一条新的评论,并准确地说出什么不起作用。@TomBrunberg好的,在我的代码中,我面临两个问题,我希望您能在任何方面帮助我。第一个,当我将项目(每个项目都有文本和图像)从listbox1拖放到listbox2时,只有文本被移动。第二个问题是,当我想切换listbox2中项目的位置时,它会被复制。我只希望项目在不复制的情况下切换。@Samar最初您要求d&d或双击将项目从LB1移动到LB2(LB2中没有关于重新排列项目的内容)。你不能突然把你的问题换成另一个问题。你问了两个选项中的一个,科霍尔回答了你的第二个选项。我的简单测试表明它工作正常。答案是正确的,除非你能解释为什么它不能回答你最初要求的两个选项中的任何一个。谢谢@TomBrunberg我已经删除了图像调用。我尝试了DblClick,但它对我不起作用。拖放只对文本有效。我没有改变我的问题,只是我有两个问题,我正试图找到一个解决方案,在问题中你会找到重新排列的项目。在我的问题中,我说,如果不可能,双击也可以。无论如何thnx@Samar这是从您昨天的原始问题复制过来的,文本仍然相同:或者如果可能的话,我想知道如何通过双击将项目从ListBox1移动到ListBox2,无需拖放。这正是科赫尔的回答!我根据
TListboxItem
类声明添加了
firemonkey
标记。当您的问题涉及到
firemonkey
framework时,在标记中指出它,了解目标平台以及您使用的是哪个Delphi版本可能很重要。后者是因为过去几年的密集发展。好的,谢谢你,我会更具体地说。这是我第一次发帖,没关系,我们都有过第一次,请注意所有要求的细节。我会对你的问题表示怀疑,但我要求你在你的帖子中包括如何填充第一个列表框。同时删除
OnDragOver
中的明显不可能项(发件人不能同时是
TListBoxItem
TImage