65.9K
CodeProject 正在变化。 阅读更多。
Home

CircleControl - 圆形运动控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (76投票s)

2010年9月13日

CPOL

5分钟阅读

viewsIcon

155210

downloadIcon

7598

圆形运动控件

引言

这是库的 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 日 - 首次发布
© . All rights reserved.