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

工业控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.61/5 (28投票s)

2008 年 4 月 11 日

CPOL

7分钟阅读

viewsIcon

90234

downloadIcon

6176

一个控件库,带有自定义渲染器,用于控件进程面板显示。

引言

在我上一篇文章中,我创建了一个带有自定义渲染器的模拟仪表。现在我想为库添加更多控件,以便能够使用它来创建用于控制进程的表单或其他各种用途。

要编译此演示,您需要 .NET 2.0。可在此处下载。该项目是用SharpDevelop(一款免费的 .NET IDE)开发的。

控件说明

在此版本的库中,我包含以下类型的控件

  • 可视化控件
    • LED灯
    • 仪表
  • 命令控件
    • 按钮
    • 旋钮

所有控件都派生自 System.Windows.Forms.UserControl,并且有一个可以编辑属性的类别,以及默认属性。通常所有类都有一个默认的渲染器类,用于绘制所有部分,但可以设置自定义渲染器来绘制单个部分或整个控件。

库命名空间

LBSoft.IndustrialCtrls.Leds

Led image

在此命名空间中,有用于可视化状态的模拟 LED 的控件。目前,只有一个类 LBLed。对于此类,您可以在设计时设置以下属性

LED 属性

  • LedColor - LED 的颜色。代码会修改颜色以模拟暗部。
  • LedSize - LED 的尺寸。您可以设置不同的宽度和高度来更改控件的外观。
  • State - LED 的状态。此属性的类型为 LedState,可用值为
    • 关闭
    • On
    • 闪烁
  • LabelPosition - 控件标签的位置。此属性的类型为 LedLabelPosition,可用值为
    • 左侧
    • 顶部
    • 右侧
    • 底部
  • Label - 控件的标签文本
  • BlinkInterval - 闪烁状态更改的间隔(以毫秒为单位)

有两个属性在设计时不可见,它们是

  • Renderer - 控件的自定义渲染器。
  • BlinkIsOn - 闪烁状态当前状态的标志

LBSoft.IndustrialCtrls.Meters

Analog meter image

在此命名空间中,有用于查看值的模拟(模拟或数字)仪表控件。目前,只有一个类 LBAnalogMeter。对于此类,您可以在设计时设置以下属性

模拟仪表属性

  • MeterStyle - 控件的样式。此属性的类型为 AnalogMeterStyle,可用值为
    • 圆形
  • BodyColor - 控件主体的颜色。
  • NeedleColor - 指针的颜色
  • ScaleColor - 控件刻度线标记的颜色
  • ScaleDivisions - 刻度的主要刻度线数量
  • ScaleSubDivisions - 量程中一个主刻度线到另一个主刻度线之间的子刻度线数量
  • ViewGlass - 用于可视化玻璃效果的标志
  • Value - 控件的当前值
  • MinValue - 控件的最小值
  • MaxValue - 控件的最大值

有两个属性在设计时不可见,它们是

  • Renderer - 控件的自定义渲染器。
  • Thresholds - LBMeterThreshold 对象集合。

LBMeterThreshold 类用于绘制仪表控件中的阈值,以便在测量值达到临界值时进行查看。此类具有以下属性

  • Color - 阈值的颜色
  • StartValue - 阈值的起始值
  • EndValue - 阈值的结束值

这是设置仪表控件中阈值的示例

    ...
    
    public void SetThresholds()
    {
        LBMeterThreshold threshold = new LBMeterThreshold();
        threshold.Color = Color.Yellow;
        threshold.StartValue = 50;
        threshold.EndValue = 70;
        this.lbAnalogMeter1.Thresholds.Add ( threshold );
        
        threshold = new LBMeterThreshold();
        threshold.Color = Color.Red;
        threshold.StartValue = 70;
        threshold.EndValue = 100;
        this.lbAnalogMeter1.Thresholds.Add ( threshold );
    }
    
    ...

LBSoft.IndustrialCtrls.Buttons

Button image

在此命名空间中,有用于发送命令的模拟按钮控件。目前,只有一个类 LBButton。对于此类,您可以在设计时设置以下属性

按钮属性

  • Style - 控件的样式。此属性的类型为 ButtonStyle,可用值为
    • 圆形
  • ButtonColor - 按钮的颜色
  • Label - 按钮的标签
  • State - 按钮的状态。此属性的类型为 ButtonState,可用值为
    • 正常
    • 按压

与之前的控件一样,有些属性在设计时不可见

  • Renderer - 控件的自定义渲染器。

事件

当状态更改时,此控件会触发一个事件来通知连接的类。此事件是

ButtonChangeState ( object sender, LBButtonEventArgs e );

事件参数的 State 属性是按钮的当前状态

LBSoft.IndustrialCtrls.Knobs

Knob image

在此命名空间中,有用于更改值的模拟旋钮(类似于滑块)的控件。目前,只有一个类 LBKnob。对于此类,您可以在设计时设置以下属性

旋钮属性

  • Style - 控件的样式。此属性的类型为 KnobStyle,可用值为
    • 圆形
  • KnobColor - 旋钮的颜色
  • ScaleColor - 旋钮刻度的颜色
  • IndicatorColor - 当前值指示器的颜色
  • IndicatorOffset - 指示器在旋钮边缘后面的偏移量
  • MinValue - 旋钮的最小值
  • MaxValue - 旋钮的最大值
  • StepValue - 使用键盘时的步进值
  • Value - 旋钮的当前值

与之前的控件一样,有些属性在设计时不可见

  • Renderer - 控件的自定义渲染器。
  • KnobCenter - 控件的中心点。

事件

当状态更改时,此控件会触发一个事件来通知连接的类。此事件是

KnobChangeValue ( object sender, LBKnobEventArgs e );

事件参数的 Value 属性是旋钮的当前值。

LBSoft.IndustrialCtrls.Utils

在此命名空间中有两个类,仅包含用于通用用途的静态成员

  • LBColorManager - 用于处理颜色的类
  • LBMath - 用于库所使用的数学函数的类

渲染器说明

现在是时候解释如何创建自定义渲染器了。任何控件都有一个基渲染器类,并且每个渲染器类都有一个设置控件的属性。渲染器类中的所有方法都是虚拟的,如果您想更改控件的外观,可以重写一个或所有方法。可用于控件的渲染器是

  • LBLedRenderer -此类允许您重新设计 LBLed 控件的外观,并具有以下方法
    • DrawBackground - 绘制控件背景的方法
    • DrawLed - 绘制 LED 的方法
    • DrawLabel - 绘制控件标签的方法
  • LBAnalogMeterRenderer - 此类允许您重新设计 LBAnalogMeter 控件的外观,并具有以下方法
    • DrawBackground - 绘制控件背景的方法
    • DrawBody - 绘制模拟仪表主体的赂
    • DrawThresholds - 绘制阈值部分的赂
    • DrawDivisions - 绘制刻度的赂
    • DrawUM - 绘制单位标签的赂(尚未实现)
    • DrawValue - 绘制当前值标签的赂(尚未实现)
    • DrawNeedle - 绘制指针的赂
    • DrawNeedleCover - 绘制指针盖的赂
    • DrawGlass - 绘制玻璃效果的赂
  • LBButtonRenderer - 此类允许您重新设计 LBButton 控件的外观,并具有以下方法
    • DrawBackground - 绘制控件背景的方法
    • DrawBody - 绘制控件主体的赂
    • DrawText - 绘制控件标签的赂
  • LBKnobRenderer - 此类允许您重新设计 LBKnob 控件的外观,并具有以下方法
    • DrawBackground - 绘制控件背景的方法
    • DrawScale - 绘制旋钮刻度的赂
    • DrawKnob - 绘制旋钮主体的赂
    • DrawKnobIndicator - 绘制当前值指示器的赂

要创建自定义渲染器,请按照以下步骤操作

  • 创建一个派生自基类渲染器的类(示例:LBLedRenderer
  • 重写一个或所有方法(示例:DrawLed
  • 在主窗体中创建自定义渲染器的实例
  • 使用 Renderer 属性将渲染器设置给控件
示例
namespace TestApp
{
    ///
    /// Class for custom renderer
    ///
    public class LBCustomLedRenderer : LBLedRenderer
    {
        ///
        /// Draw a rectangular led
        ///
        public virtual bool DrawLed( Graphics Gr, RectangleF rc )
        {
            if ( this.Led == null )
                return false;
    
            Color c = this.Led.LedColor;
            SolidBrush br = new SolidBrush ( c );
            Pen pen = new Pen ( c );
            
            Gr.DrawRectangle ( pen, rc );
            Gr.FillRectangle ( br, rc );
            
            br.Dispose();
            pen.Dispose();
            
            return true;
        }
    }
    
    public partial class MainForm : Form
    {
        private LBCustomLedRenderer myRenderer = null;
        
        public MainForm()
        {
            InitializeComponent();
            
            this.myRenderer = new LBCustomLedRenderer();
            this.lbLed1.Renderer = this.myRenderer;
        }
        
        ...
    }            
}

结论

这是该库的初始版本,许多功能尚未实现,我希望尽快实现。任何建议/评论/反馈都非常受欢迎,因为我才刚开始使用 C# 两周,我不知道我编写的代码是否是最佳实践。

对于本文,我使用了以下文章的代码和想法

历史

  • 1.0 (2008 年 4 月 9 日)
    • 首次发布
© . All rights reserved.