【问题标题】:Drag Drop ListBoxItems from ListBox1 to ListBox2 with their images and avoiding duplication Delphi将 ListBoxItems 从 ListBox1 拖放到 ListBox2 及其图像并避免重复 Delphi
【发布时间】:2017-04-26 13:19:41
【问题描述】:

我的代码正在运行并且可以拖放,但我要添加的是使用它们的图像将项目从 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;

【问题讨论】:

  • 我添加了 firemonkey 标签,基于 TListboxItem 类声明。每当您的问题涉及firemonkey 框架时,请在标签中注明,了解目标平台以及您使用的 Delphi 版本可能很重要。后者是因为过去几年的密集发展。
  • 好的,谢谢,我会更详细。这是我第一次发帖
  • 没关系,我们都是第一次,请注意所有要求的细节。我会看看你的问题,但我要求你在你的帖子中包括你如何填充第一个列表框。同时删除OnDragOver 中明显的不可能(发件人不能同时是TListBoxItem 和TImage!)

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


【解决方案1】:

在listbox1上放置DblClick事件,将选中项的父项移动到另一个listbox。

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

【讨论】:

  • @Samar 如果你仔细想想,我相信你明白为什么 ...它不起作用... 是最无用的单词序列之一。所以,请添加一条新评论,并准确说明什么不起作用。
  • @TomBrunberg 好的,所以在我的代码中我面临两个问题,我希望你能帮助我解决任何问题。第一个当我将项目(每个项目都有文本和图像)从 listbox1 拖放到 listbox2 时,只有文本被移动。第二个问题是当我想切换 listbox2 中项目的位置时,它会重复。我只想切换项目而不重复。
  • @Samar 最初您要求 d&d 或双击将项目从 LB1 移动到 LB2(没有关于重新排列 LB2 中的项目)。您不能突然将您的问题更改为另一个问题。 IOW 您要求 2 个选项中的 1 个,Kohull 回答了您的第二个选项。我的简单测试表明它工作正常。答案是正确的,除非你能解释它为什么不能回答你最初要求的两个选项。
  • 谢谢@TomBrunberg 我已经删除了图片调用。我尝试了 DblClick 它对我不起作用,但拖放仅适用于文本。我没有改变我的问题,只是我有 2 个问题,我正在努力寻找解决方案,在问题中你会找到重新排列的项目。在我的问题中,我说如果不可能这样做,是否可以通过双击来做到这一点。在所有情况下thnx
  • @Samar 这是从您昨天的原始问题复制而来,文本仍然相同:或者,如果可能的话,我很想知道如何将项目从 ListBox1 移动到 ListBox2,只需一个双击不需要拖放。这正是Kohull回答的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多