CircleControl库是.NET 2.0环境下的一个控件库,它允许用户进行圆形运动,例如旋转一个刻度盘或者设置一个模拟时钟的指针。这个库不仅支持标记——可以程序化地定位或通过鼠标拖动的图形对象,还支持标记集——一组可以一起移动的标记。此外,背景可以填充彩色环、刻度标记和文本字符串。
当前版本为1.2.3,修复了一个bug,即CircleControl.AngleChanged()在鼠标按下或释放时并不总是触发。同时,新增了一个特性,在EditDefaults示例应用程序中显示最新的AngleChangedArgs。
CircleControl类是一个.NET 2.0控件,支持圆形运动。控件支持标记和标记集,背景可以有彩色环、刻度标记和文本字符串。所有公共和受保护的类、方法和属性都使用标准的C# XML文档注释进行了完整文档化。项目包括一个HTML帮助文件。
CircleControl_123_Library下载包括:
CircleControl_123_Demo下载包括上述文件以及:
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);
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, // 内部颜色
Color.DarkGreen, // 边框颜色
1.0f, // 边框厚度
poly, // 定义标记形状的多边形
130.0f, // 标记的角度偏移
MouseButtons.Left, // 可以拖动标记的按钮
true // 标记是否可见
);
ms.Add(m);
多边形定义了角度为零时标记的外观。它使用笛卡尔坐标系,其中(0,0)是控件的中心,1.0是到最近边缘的距离。标记的内部区域可以是纯色、阴影图案或各种颜色渐变。边框可以是任何颜色和厚度。
每当标记的角度变化,或者拖动标记的鼠标状态变化时,都会引发AngleChanged事件。要接收事件,请安装一个处理程序:
cc.AngleChanged += new CircleControl.AngleChangedHandler(OnAngleChange);
背景可以填充彩色环、刻度标记和文本字符串。以下代码片段添加了一个米色环和四个文本项,就像在指南针上放置的那样:
cc.Rings.Add(new CircleControl.Ring(
0.6f, // 半径大小
Color.Beige, // 内部颜色
Color.Black, // 边框颜色
2.0f // 边框厚度
));
Font f = new Font("Arial", 8.0f);
cc.TextItems.Add(new CircleControl.TextItem(f, // 字体
Color.Red, // 颜色
"N", // 文本
0.8f, // 距离原点的距离
90.0f // 角度
));
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
));