我有两个列表框。 listbox1包含数据库名称列表。另一方面,Listbox2列出了listbox1上DB关联的内容的标题。基本上你单击listbox1并将它加载到listbox2中DB的内容的所有标题。
我想现在实现一个拖放功能。我知道如何在两个列表框之间拖动;那个不问题。我想要实现的是:
点击listbox2中的标题
将项目拖放到lisbox1中的项目
标题现在是listbox1中项目所指向的数据库的一部分
现在,用于移动实际数据的所有后端代码都已编码。如何让listbox1选择(并知道)鼠标即将从listbox2中删除项目的项目?通过在两个列表框之间实现简单的拖放将导致listbox2中的项目被添加到listbox1中,因为我在拖动某些内容时无法在listbox1中选择项目。
我希望我以正确的方式解释这一点。
感谢代码。
答案 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
函数。