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

老式模拟仪表控件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.84/5 (12投票s)

2005 年 3 月 14 日

2分钟阅读

viewsIcon

96838

downloadIcon

2096

本文介绍如何创建一个从 System.Windows.Form.Control 类派生的控件。

Sample Image

引言

这个控件类是为模拟一个模拟仪表或刻度盘而编写的,也是为了学习如何创建自定义控件。这是一个仪表示例。仪表显示系统的当前值。当系统的值发生变化时,变化会反映在仪表上。

背景

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;
}

AngleMeterControl 用于重新绘制正确位置的线条的唯一属性。

关注点

为了在表盘上绘制数字并在仪表上绘制线条,我必须转换控件的中心,然后使用变换。这在最好的情况下也是很棘手的。这是绘制指向仪表值的线条的代码。

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 日
    1. 根据 Mav.Northwind 的建议进行了更改以修复闪烁。在构造函数中将角度初始化为零,以在静止位置绘制线条。将 Invalidate 添加到 Angle 属性,而不是使用事件来重新绘制仪表。
    2. 添加了区域以使仪表控件代码更易于阅读,更简洁。
    3. 添加了设计器支持以自定义控件的外观和感觉。
© . All rights reserved.