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

时间:2017-04-26 13:19:41

标签: delphi drag-and-drop listbox firemonkey listboxitem

我的代码正常工作和拖放但我要添加的是将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;

1 个答案:

答案 0 :(得分:2)

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

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  if ListBox1.Selected <> nil then
    ListBox1.Selected.Parent := ListBox2;
end;