在单个表单中移动多个容器之间的控件

时间:2014-07-30 21:11:59

标签: c# winforms

问题说明了一切。

如何在多个面板之间移动控件,例如PictureBox,或者在面板和流布局面板之间移动。

我知道我可以在多个面板之间拖放控件等,但这并不会使控件在容器之间可视化移动。鼠标只会更改为不同的光标,拖动到另一个控件并释放鼠标按钮后,控件将显示在另一个容器上。我要求控件在视觉上可以移动。

有人可以提供一个简单的例子,所以我可以提出想法来应用我的情况。

注意:运行时当然。

2 个答案:

答案 0 :(得分:3)

假设您需要运行时:

  • 您可以使用Control.SaveToBitmap方法
  • 将控件保存为位图
  • 创建cursor from image
  • 设置我们从控件创建的当前光标。
  • 拖放完成后重置光标。

答案 1 :(得分:0)

让我们举一个拖动按钮的简单示例。

假设您有两种类型的容器控件: 1)X-Y布局 2)流程布局(从左到右)

单击以拖动按钮时,将点击的x偏移和y偏移记录到控件的左上角。同样,在Controls集合中记录控件的索引。

当鼠标移动时,首先检查鼠标是否更改了容器控件。 如果是,则从当前父项中删除该按钮并将其添加到新父项。

如果将按钮添加到流控制中,则需要计算新索引。为此,请计算从鼠标到所有其他控件的边界框的最近边缘的距离。然后,如果鼠标留在该控件的中心,则插入该控件的索引减去1,否则插入该控件的右侧(索引+ 1)。

如果按钮被添加到X-Y布局,则索引无关紧要。您可以简单地设置按钮相对于鼠标的位置加上x偏移和y偏移。

在拖动鼠标时,您需要强制控件刷新。我认为在容器控件上调用Invalidate()就足够了。

这应该为您提供可以用来开始编码的基本想法。