CircleControl - 圆形运动控件






4.87/5 (76投票s)
圆形运动控件
- 下载 CircleControl_123_Source.zip - 250.3 KB
- 下载 CircleControl_123_Library.zip - 584.7 KB
- 下载 CircleControl_123_Demo.zip - 616 KB
引言
这是库的 1.2.3 版本。它修复了 CircleControl.AngleChanged() 在鼠标抬起或按下事件中并非总是触发的错误。向 EditDefaults 示例应用程序添加了一个功能,用于显示最近的 AngleChangedArgs。
CircleControl 类是一个 .NET 2.0 控件,允许进行圆周运动,例如旋转表盘或设置模拟时钟的指针。
该控件支持标记 - 可以通过编程方式拖动或用鼠标拖动的图形对象,以及标记集,即成组移动的标记。背景可以填充彩色环、刻度线和文本字符串。
![]() | ![]() |
所有公共和受保护的类、方法和属性都使用标准的 C# XML 文档注释进行了全面记录。项目包含一个 HTML 帮助文件。有关使用该类的更多详细信息,请参阅帮助文件中的“概述”部分,有关完整的工作应用程序源代码列表,请参阅“示例程序”部分。
CircleControl_123_Library 下载包含
CircleControl.dll | 类库 |
CircleControl.chm | 帮助文件。 |
CircleControl_123_Demo 下载包含上述文件,以及
AnalogClock.exe | 显示模拟时钟的示例程序;可以通过拖动时针和分针来更改时间。 |
ColorDialer.exe | 用于拾取颜色的示例程序;旋转红色、蓝色和绿色表盘以选择 RGB 值。该程序是对控件的视觉上的随意演示,并非严肃的颜色拾取器。 |
EditDefaults.exe | 演示更改各种 CircleControl 属性效果的示例程序。它还演示了新的 Snap 功能。 |
GantryControl.exe | 帮助文件“示例程序”部分中所述的示例程序。 |
ManyRings.exe | 显示大量环的示例程序。包含与 <c>FixedBackground 设置为 <c>true 或 <c>false 时的绘图时间进行比较的功能。 |
CircleControl_123_Source 下载包含上述所有程序的源代码,以及构建帮助文件所需的必要文件。
与其他 .NET Framework 版本的兼容性
CircleControl 库使用 .NET Framework 2.0 版本编译。为了确认其他框架版本没有问题,编译后的库被一个应用程序使用,该应用程序又是在 .NET Framework 3.0、3.5、4.0 和 4.5 版本下编译的。CircleControl 在所有这些版本中都能正常工作。
使用代码
要使用 CircleControl 类,只需将其添加到现有窗体上
CircleControl cc = new CircleControl();
cc.Location = new System.Drawing.Point(0, 0);
cc.Size = new System.Drawing.Size(200, 200);
form.Controls.Add(cc);
默认情况下,CircleControl 的新实例已准备就绪,可用于单个三角形标记和十个刻度线。
要添加新标记,请创建一个新的 MarkerSet,然后添加一个或多个 Marker 对象
CircleControl.MarkerSet ms = new CircleControl.MarkerSet();
cc.MarkerSets.Add(ms);
// Polygon which defines shape of marker
PointF[] poly = new PointF[4];
poly[0] = new PointF(0.25F, 0.00F);
poly[1] = new PointF(0.70F, 0.18F);
poly[2] = new PointF(0.64F, 0.00F);
poly[3] = new PointF(0.70F, -0.18F);
CircleControl.Marker m = new CircleControl.Marker(
Color.Brown, // inside color
Color.DarkGreen, // border color
1.0f, // border thickness
poly, // polygon defining marker shape
130.0f, // angle offset of marker
MouseButtons.Left, // which button(s) can drag the marker
true); // is marker visible?
// Add new marker to MarkerSet, at which point
// it becomes visible on the control
ms.Add(m);
多边形定义了零角度标记的外观。它使用笛卡尔坐标系,其中 (0,0) 是控件的中心,1.0 是到最近边缘的距离。标记的内部区域可以是纯色、图案填充或各种颜色渐变。边框可以是任何颜色和厚度。
每当标记的角度发生变化,或拖动标记的鼠标状态发生变化时,都会引发 AngleChanged 事件。要接收事件,请安装一个处理程序
cc.AngleChanged += new CircleControl.AngleChangedHandler(OnAngleChange);
背景可以填充彩色环、刻度线和文本字符串。以下代码片段添加了一个米黄色环和四个文本项,它们将被放置在罗盘上
cc.Rings.Add(new CircleControl.Ring(0.6f, // size as radius
Color.Beige, // internal color
Color.Black, // border color
2.0f); // border thickness
Font f = new Font("Arial", 8.0f);
cc.TextItems.Add(new CircleControl.TextItem(f, // font
Color.Red, // color
"N", // text
0.8f, // distance from origin
90.0f); // angle
cc.TextItems.Add(new CircleControl.TextItem(f, Color.Red, "S", 0.8f, 270.0f);
cc.TextItems.Add(new CircleControl.TextItem(f, Color.Red, "E", 0.8f, 0.0f);
cc.TextItems.Add(new CircleControl.TextItem(f, Color.Red, "W", 0.8f, 180.0f);
环的内部区域可以是纯色、图案填充或各种颜色渐变。边框可以是任何颜色和厚度。文本项可以是任何字体、颜色或旋转。它们的大小可以是固定的,也可以是相对于控件大小的。
上述代码片段仅提供简要概述。有关完整的类文档,请参阅项目帮助文件。
关注点
编写、完善和调试代码一如既往地是一次愉快的经历。但记录每一个公共和受保护的类、方法和属性并非如此。那是苦差事。Sandcastle Help File Builder 是一个免费工具,用于生成帮助文件,部分抵消了编写完整而适当的文档的痛苦。但记录一切都是一次学习经历,我对于编写完整有用文档的程序员,尤其是对于负责创建广泛的 .NET 文档的微软程序员,产生了极大的敬意。
历史
- 2015 年 6 月 13 日 - Release 1.2.3
- 修复了 CircleControl.AngleChanged() 在鼠标抬起和按下事件中并非总是触发的错误,
- 2014 年 9 月 5 日 - Release 1.2.2
- 修正了轻微的文档错误,
- 将 .csproj 文件转换为 Visual Studio 2013 格式。
- 将帮助文件转换为与 SandCastle Help File Builder 2014.5.31.0 一起使用。
- 2013 年 9 月 14 日 - Release 1.2.1
- 修复了私有方法 <c>CircleControl.MarkerSet.CalcSnapDist() 中的错误,如果 <c>CircleControl.AngleWraps 为 <c>false,则可能不正确地计算捕捉角度。
- 2012 年 9 月 8 日 - Release 1.2
- 向 <c>CircleControl.MarkerSet 添加了 <c>SnapMode 和 <c>SnapAngles 属性。
- 2011 年 7 月 21 日 - Release 1.1.2
- 修复了 <c>CircleControl.Collections.Insert() 方法中的错误,其中 Cc 参数被错误地设置为 <c>null。
- 2010 年 11 月 1 日 - Release 1.1.1
- 修复了 <c>CircleControl.SetAngleMinMax() 方法中的错误,该调用被忽略,除非 <c>min 和 <c>max 参数都与当前值不同。
- 修复了当 <c>AngleWraps 为 <c>false 时,标记角度并非总是被正确计算的错误。
- 2010 年 10 月 12 日 - Release 1.1
- 向 <c>CircleControl 添加了 <c>FixedBackground 属性。
- 2010 年 9 月 12 日 - 首次发布