老式模拟仪表控件






3.84/5 (12投票s)
2005 年 3 月 14 日
2分钟阅读

96838

2096
本文介绍如何创建一个从 System.Windows.Form.Control 类派生的控件。
引言
这个控件类是为模拟一个模拟仪表或刻度盘而编写的,也是为了学习如何创建自定义控件。这是一个仪表示例。仪表显示系统的当前值。当系统的值发生变化时,变化会反映在仪表上。
背景
从 Control
类派生的控件示例并不多。这是可以理解的,因为没有设计器支持。MSDN 有一些示例,但它们非常简单,可以在 这里 找到。本文仅包含项目的第一个部分,即制作控件本身。我添加了一些设计器支持,以便可以使用 Visual Studio 中的属性编辑器更改仪表盘、边框、指针和数字的颜色。创建自定义控件-提供设计时支持 1 由 Kodanda Pani 编写,非常有帮助。
使用代码
为了使用仪表控件,您必须将 MeterControl.dll 添加到 Windows 应用程序项目引用和工具箱的 Windows Forms 选项卡下。在工具箱中找到 MeterControl
并将其拖到您的窗体上。仪表绘制在窗体中央,因此您需要调整大小以适应仪表。在演示中,我使用一个跟踪条来更改仪表的值,如下所示
private void trackBar1_Scroll(object sender, System.EventArgs e) {
meter1.Angle = trackBar1.Value;
}
Angle
是 MeterControl
用于重新绘制正确位置的线条的唯一属性。
关注点
为了在表盘上绘制数字并在仪表上绘制线条,我必须转换控件的中心,然后使用变换。这在最好的情况下也是很棘手的。这是绘制指向仪表值的线条的代码。
private void DrawLine(Graphics g, int angle, int offset)
{
Matrix m = new Matrix();
PointF center =
new PointF(this.ClientRectangle.Width/2 ,this.ClientRectangle.Bottom -15 );
m.RotateAt( angle+180, center );
m.Translate( center.X, center.Y );
g.Transform = m;
g.DrawLine( meterlinePen, 0, 0, this.ClientRectangle.Width/2 + offset , 0 );
}
注释
接下来,我将研究如何为表盘上绘制数字添加一些灵活性。任何建议都将受到热烈欢迎。
历史
- 2005 年 5 月 13 日
- 根据 Mav.Northwind 的建议进行了更改以修复闪烁。在构造函数中将角度初始化为零,以在静止位置绘制线条。将
Invalidate
添加到Angle
属性,而不是使用事件来重新绘制仪表。 - 添加了区域以使仪表控件代码更易于阅读,更简洁。
- 添加了设计器支持以自定义控件的外观和感觉。
- 根据 Mav.Northwind 的建议进行了更改以修复闪烁。在构造函数中将角度初始化为零,以在静止位置绘制线条。将