1

我有一个带有停靠在其中的面板的表单。然后我在主面板(命名为 ContainerPanel)上动态创建 15 个面板(命名为:panel_n)和 15 个图片框(命名为:picturebox_n)。

在使用相关鼠标事件创建的面板 (panel_n) 上拖动任何图片框时。我想获取图片框被拖过的面板的名称。鼠标光标似乎被捕获。

我已经尝试创建一个 IMessageFilter 界面,但是在将其中一个图片框拖动到任何一个面板上时仍然没有触发事件。

ClientRectangle.IntersectsWith 函数也不起作用,因为坐标始终为 0,0。

我只需要拖动图片框的面板名称(最好在 mouseup 事件上)

4

1 回答 1

1

如果你给图片框一个 OnMouseDown 事件,它会这样说:

(sender as PictureBox).DoDragDrop(sender, DragDropEffects.Copy);

然后您可以将面板的 AllowDrop 属性设置为 true,并且在它们的 OnDragDrop 事件中,您可以像这样获取它们的名称:

string myName = (sender as Panel).Name;

编辑:另外,您需要给面板一个 OnDragEnter 事件,如下所示:

e.Effect = DragDropEffects.Copy;

当然,您可以更改CopyMoveLink或任何适合您正在做的事情。它只是更改使用的鼠标指针图标。

于 2010-06-14T13:09:10.700 回答