如何检测哪个列表框项目被删除?

时间:2010-02-01 15:37:08

标签: delphi listbox drag-and-drop

我有两个列表框。 listbox1包含数据库名称列表。另一方面,Listbox2列出了listbox1上DB关联的内容的标题。基本上你单击listbox1并将它加载到listbox2中DB的内容的所有标题。

我想现在实现一个拖放功能。我知道如何在两个列表框之间拖动;那个问题。我想要实现的是:

  1. 点击listbox2中的标题

  2. 将项目拖放到lisbox1中的项目

  3. 标题现在是listbox1中项目所指向的数据库的一部分

  4. 现在,用于移动实际数据的所有后端代码都已编码。如何让listbox1选择(并知道)鼠标即将从listbox2中删除项目的项目?通过在两个列表框之间实现简单的拖放将导致listbox2中的项目被添加到listbox1中,因为我在拖动某些内容时无法在listbox1中选择项目。

    我希望我以正确的方式解释这一点。

    感谢代码。

1 个答案:

答案 0 :(得分:3)

如果我理解正确,您正试图查看正在删除的项目。你需要的是ListBox的ItemAtPos功能。它需要TPoint参数,OnDragDrop事件处理程序具有X和Y坐标。

在此示例中,ListBox2是Source,ListBox1是被删除的控件。 iItem为我提供了要放到的ListBox1项的ItemIndex

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  iItem: Integer;
  MyPoint: TPoint;
begin
  MyPoint.X := X;
  MyPoint.Y := Y;

  iItem := ListBox1.ItemAtPos(MyPoint, True);

  ListBox1.Items.Insert(iItem, ListBox2.Items[ListBox2.ItemIndex]);
end;

这里没有范围检查,这只是一个例子来说明ItemAtPos函数。