我有一个WindowsForm应用程序。在这个应用程序中,我画了一些圆圈,所以我有一个名为“Circle”的自定义类 ,它知道自己画(在这个类中有一个方法public void draw(Graphics g))
现在当表单正在加载并且我画了一些圆圈时,我想让用户能够拖动圆圈..
所以我的问题是如何将 mouseHandler 添加到自定义类Circle?我认为这个类应该有它自己的 mouseHandler 但我不明白该怎么做..
我有一个WindowsForm应用程序。在这个应用程序中,我画了一些圆圈,所以我有一个名为“Circle”的自定义类 ,它知道自己画(在这个类中有一个方法public void draw(Graphics g))
现在当表单正在加载并且我画了一些圆圈时,我想让用户能够拖动圆圈..
所以我的问题是如何将 mouseHandler 添加到自定义类Circle?我认为这个类应该有它自己的 mouseHandler 但我不明白该怎么做..
让您的 Circle 对象直接处理鼠标事件需要它从 Control 类派生。那将是一个很大的错误,Control 类有几个不受欢迎的属性,使其不适合形状 doodah。从它是一个矩形窗口开始,并且不能很好地支持重叠。这些东西是可以修复的,但它是相当痛苦的,它只会给已经非常昂贵的类增加昂贵的开销。
相反,让它只是一个类。用一个方法bool HitTest(Point pos)
。和一个方法void Move(Size dist)
。并创建另一个名为 ShapeCollection 的类来存储形状列表。同样使用 Paint 和 HitTest 方法,它们只是迭代形状的集合。
您现在可以轻松实现表单的 Paint 事件,调用 ShapeCollection.Paint 方法。您可以实现 MouseDown 事件,调用 HitTest 并记住返回 true 的形状的索引。并实现 MouseMove 事件,在所选形状上调用 Move 并调用 Invalidate 以便形状将自身绘制在新位置。
在 WPF 中更容易上手,它没有与 Control 类相同的问题,并且内置了形状支持。