0

我有一个WindowsForm应用程序。在这个应用程序中,我画了一些圆圈,所以我有一个名为“Circle”的自定义类 ,它知道自己画(在这个类中有一个方法public void draw(Graphics g)

现在当表单正在加载并且我画了一些圆圈时,我想让用户能够拖动圆圈..

所以我的问题是如何将 mouseHandler 添加到自定义类Circle?我认为这个类应该有它自己的 mouseHandler 但我不明白该怎么做..

4

1 回答 1

1

让您的 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 类相同的问题,并且内置了形状支持。

于 2013-01-24T22:46:32.060 回答