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



问题说明了一切。

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

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

谁能提供一个简单的例子,这样我就可以把这个想法提取出来应用到我的情况中。

假设运行时需要:

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

让我们看一个简单的拖动按钮的例子。

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

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

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

如果按钮被添加到流量控制中,那么您需要计算新的索引。为此,计算从鼠标到所有其他控件的边界框的最近边缘的距离。然后,如果鼠标位于该控件中心的左侧,则插入到该控件的索引- 1处,否则插入到该控件的右侧(索引+ 1)。

如果按钮被添加到X-Y布局中,那么索引就不那么重要了。您可以简单地设置按钮相对于鼠标的位置加上x偏移量和y偏移量。

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

这应该给你一个基本的想法,你可以用它来开始编码的东西

最新更新