2010-02-01 81 views
2

我有两个列表框。 listbox1包含数据库名称的列表。另一方面,Listbox2具有listbox1上DB关联内容的标题列表。基本上你点击listbox1,它会加载到listbox2的所有标题的数据库的内容。如何检测哪个列表框项目被放到了哪个列表框项目上?

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

  1. 点击标题中listbox2

  2. 阻力项放到lisbox1

  3. 标题中的项目现在是DB的部分指出通过在ListBox1中

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

我希望我解释这是正确的方法。

代码表示赞赏。

回答

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功能。

+0

然后我假设该项目的名称将在Items.name [Listbox2.ItemIndex]? – Uri 2010-02-01 16:48:15

+0

Uri,ListBox2.Items [ListBox2.ItemIndex]包含要删除项目的文本。 – 2010-02-01 16:57:18

+0

谢谢。所以,因为我不想添加新的项目,我将删除最后一行(ListBox1.Items.Insert)。当鼠标在其上时,如何突出显示listbox1上的项目?在释放鼠标按钮之前,您不知道它将走向何处 – Uri 2010-02-01 17:18:19

相关问题