将鼠标处理程序添加到 c# 上的自定义对象类

本文关键字:自定义 对象 鼠标 处理 程序 添加 | 更新日期: 2023-09-27 17:56:00

我有一个WindowsForm应用程序。在这个应用程序中,我画了一些圆,所以我有一个名为"圆"的自定义类知道自己画(这门课上有一个方法公共空抽(Graphics g))

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

所以我的问题是如何将鼠标处理程序添加到自定义类圆圈?我以为这个类应该有自己的鼠标处理程序,但我不明白如何要做到..

将鼠标处理程序添加到 c# 上的自定义对象类

让 Circle 对象直接处理鼠标事件需要它派生自 Control 类。 这将是一个很大的错误,Control 类有几个不需要的属性,使其不适合形状 doodah。 从它是一个矩形窗口开始,并且不能很好地支持重叠。 这些事情是可以修复的,但它是相当痛苦的,它只会给已经非常昂贵的类增加昂贵的开销。

相反,让它只是一个类。 使用方法bool HitTest(Point pos). 和一种方法void Move(Size dist). 并创建另一个名为 ShapeCollection 的类,用于存储形状列表。 同样使用 Paint 和 HitTest 方法,它们只是迭代形状的集合。

现在,您可以轻松实现窗体的 Paint 事件,调用 ShapeCollection.Paint 方法。 您可以实现 MouseDown 事件,调用 HitTest 并记住返回 true 的形状的索引。 并实现 MouseMove 事件,对所选形状调用 Move 并调用 Invalid,以便形状在新位置绘制自身。

在 WPF 中更容易上手,它没有与 Control 类相同的问题,并且内置了形状支持。