0

可能重复:
单击并将图像拖动到图像网格?

我的表单中有几个图像框,我想知道如何在表单上放置一个网格,其中包含一堆线条,所以整个网格是一堆 64 x 64 的正方形。我需要它,所以我可以选择一个图像并使用鼠标将其放置到一个特定的正方形上,并且能够遍历整个网格并检查网格上一个特定图像的数量。为了让您更好地了解我在做什么,我有几个包含不同 64 x 64 图像的图像框。还有另一个图像框显示了我上次单击的图像,它就像一个画笔,因为每当您左键单击网格中的一个框时,它都会将其粘贴到网格中的特定框中。我也需要它,所以我可以右键单击该框并删除鼠标所在框中的图像。最后,我需要能够读取框中的所有图像并将其输出到我以后可以打开的文件中。我正在使用它在游戏中创建土地,程序将输出所需的纹理以及构成整个地形的盒子的地面水平。我需要知道的是我应该做什么样的事情才能做到这一点?在过去的几个小时里,我一直在尝试如何制作盒子以及如何知道鼠标在哪里等等,但我完全被卡住了。一个简单的想法会很有帮助。我实际上不知道我应该为此使用什么控件,因此不涉及任何网格控件的想法仍然非常有用。我需要知道的是我应该做什么样的事情才能做到这一点?在过去的几个小时里,我一直在尝试如何制作盒子以及如何知道鼠标在哪里等等,但我完全被卡住了。一个简单的想法会很有帮助。我实际上不知道我应该为此使用什么控件,因此不涉及任何网格控件的想法仍然非常有用。我需要知道的是我应该做什么样的事情才能做到这一点?在过去的几个小时里,我一直在尝试如何制作盒子以及如何知道鼠标在哪里等等,但我完全被卡住了。一个简单的想法会很有帮助。我实际上不知道我应该为此使用什么控件,因此不涉及任何网格控件的想法仍然非常有用。

4

1 回答 1

0

我不知道这是否是最好的主意,但您可以使用 FlowLayoutPanel 并将 WrapContent 设置为 true 并且 FlowDirection = LeftToRight。虽然我不知道拖放操作(从来没有用 FlowLayoutPanel 做过,但是那里有一些不错的教程)。

您可以使用鼠标事件跟踪鼠标位置。如果您不想这样做:

您可以随时使用以下方法获得绝对位置:

Point currentPos = System.Windows.Forms.Cursor.Position;

然后,要获得(当前)控件的相对位置:

Point relativeLoc = this.PointToClient(currentPos)

...然后,要控制鼠标在 FlowLaoutPanel 上的位置:

Control c = flowLayoutPanel1.GetChildAtPoint(relativeLoc);
于 2013-01-24T07:50:39.303 回答