C# 创建可移动的几何体对象

C# 创建可移动的几何体对象,c#,events,graphics,geometry,C#,Events,Graphics,Geometry,使用Graphics类和面板,我可以在窗体上绘制几何图形。我知道我不能将事件应用于此形状(如单击、拖动等) 如何创建可以应用事件的几何图形(可能使用点),例如允许通过拖放移动形状?如果将事件处理程序直接附加到绘制这些形状的面板上,则可以使用它们来确定用户在何处悬停鼠标,在何处单击,如果他们正在拖动,等等。您可以确定用户是单击点的顶点(可能允许他们更改形状)还是在定义多边形的一组点内(可能允许他们移动多边形)。然后,您可以根据用户的鼠标“手势”对定义该形状的点阵列进行必要的更改,然后使用这些点在下

使用
Graphics
类和面板,我可以在窗体上绘制几何图形。我知道我不能将事件应用于此形状(如单击、拖动等)


如何创建可以应用事件的几何图形(可能使用点),例如允许通过拖放移动形状?

如果将事件处理程序直接附加到绘制这些形状的面板上,则可以使用它们来确定用户在何处悬停鼠标,在何处单击,如果他们正在拖动,等等。您可以确定用户是单击点的顶点(可能允许他们更改形状)还是在定义多边形的一组点内(可能允许他们移动多边形)。然后,您可以根据用户的鼠标“手势”对定义该形状的点阵列进行必要的更改,然后使用这些点在下一个窗口Paint()上重新绘制该形状


作为对“如何知道单击了哪个形状”的简洁回答,实施“多边形中的点”测试;给定定义多边形M和点P的一组点,点P可能在M内,也可能不在M内,找到保证在要测试的形状外的点Q,在P和Q之间绘制一条假想线PQ,并计算PQ与M相交的线段数。如果这个数字是奇数,P在M之内。

为什么对非真实问题关闭?例如,“应用于事件”和“单独移动”是什么意思?我就是不明白。PictureBox和这些有什么关系?你所说的所有这些都是不相关的.“不是一个真正的问题”-见下文的框架。原因之一是“太模糊/不完整”回答为注释:如果您将事件处理程序直接附加到绘制这些形状的面板上,您可以使用它们确定用户在何处悬停鼠标、单击何处、是否拖动等。您可以确定用户是否在点的顶点上单击(可能允许他们更改形状)或在定义多边形的一组点内(可能允许他们移动多边形)。然后,您可以根据用户的鼠标“手势”对定义该形状的一组点进行必要的更改,然后使用这些更改在下一个窗口Paint()上重新绘制形状。作为对“我如何知道单击了哪个形状”,实现“多边形中的点”"测试;给定一组定义多边形M和点P的点,点P可能在M内,也可能不在M内,找到一个保证在您要测试的形状之外的点Q,在P和Q之间画一条假想线PQ,并找出假想线与M相交的线段数。如果该数字为奇数,P位于M.1内。我如何计算线段数PQ穿过的M的s?2.我没有该形状的点数组,该形状被绘制,然后其点被删除,剩下的就是绘制的形状。然后不要删除这些点。保留它们,并在以后调用Paint事件处理程序时使用它们绘制形状。至于确定两条线段是否相交,这是一个简单的问题这是一道数学题,在这里和math.SE上都被回答了很多次。