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

AGauge 的改进版本(一个快速、高性能的仪表盘)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (9投票s)

2012年8月28日

Zlib

1分钟阅读

viewsIcon

86702

downloadIcon

10909

基于 AGauge 的改进型 WinForms 仪表控件。

引言

这是 AGauge 的一个改进版本,AGauge 是由 A.J Bauer 创建的一个 WinForm 仪表控件。 https://codeproject.org.cn/Articles/17559/A-fast-and-performing-gauge。 对原始代码进行了一些修改,详情如下: 

AGauge_Bin.zip 包含编译后的 DLL 和一个演示应用程序。 请注意,这些更改与原始代码不兼容。

改进

动态仪表标签和仪表范围

仪表标签(以前称为 CapText)和范围的属性被分组到 GaugeRangesGaugeLabels 中,这使我们能够根据需要创建任意数量的范围和标签。 范围和标签可以从代码或属性窗口的集合编辑器中进行编辑。

[System.ComponentModel.Browsable(true),
System.ComponentModel.Category("AGauge"),
System.ComponentModel.Description("Gauge Ranges.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public AGaugeRangeCollection GaugeRanges { get { return _GaugeRanges; } }
private AGaugeRangeCollection _GaugeRanges;

[System.ComponentModel.Browsable(true),
System.ComponentModel.Category("AGauge"),
System.ComponentModel.Description("Gauge Labels.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public AGaugeLabelCollection GaugeLabels { get { return _GaugeLabels; } }
private AGaugeLabelCollection _GaugeLabels;

此外,每个标签可以使用不同的字体设置,因为标签是 AGaugeLabel 的实例。

添加了 NeedleType 枚举

AGauge 控件具有两种不同的指针设计,可以通过 NeedleType 属性选择。 NeedleType 属性的类型已从 Int32 (0 或 1)更改为枚举类型(NeedleType.AdvanceNeedleType.Simple),以避免用户输入无效值。

事件

更新 ValueInRangeChangedEvent

ValueInRangeChangedDelegate 已更改为 ValueInRangeChangedEvent 以允许进行多个订阅。 该事件已更改为仅在值进入或离开定义的范围时触发。 此外,ValueInRangeChangedEventArgs 已更新为保存当前范围和仪表值。 

[Description("This event is raised if the value is entering or leaving defined range.")]
public event EventHandler<ValueInRangeChangedEventArgs> ValueInRangeChanged;
private void OnValueInRangeChanged(AGaugeRange range, Single value)
{
    EventHandler<ValueInRangeChangedEventArgs> e = ValueInRangeChanged;
    if (e != null) e(this, new ValueInRangeChangedEventArgs(range, value, range.InRange));
}

/// <summary>
/// Event argument for <see cref="ValueInRangeChanged"/> event.
/// </summary>
public class ValueInRangeChangedEventArgs : EventArgs
{
    /// <summary>
    /// Affected GaugeRange
    /// </summary>
    public AGaugeRange Range { get; private set; }
    /// <summary>
    /// Gauge Value
    /// </summary>
    public Single Value { get; private set; }
    /// <summary>
    /// True if value is within current range.
    /// </summary>
    public bool InRange { get; private set; }
    public ValueInRangeChangedEventArgs(AGaugeRange range, Single value, bool inRange)
    {
        this.Range = range;
        this.Value = value;
        this.InRange = inRange;
    }
}

添加了 ValueChangedEvent

添加了 ValueChanged 事件,以便在更新仪表值时通知用户。 请注意,尝试设置超出定义的仪表范围的仪表值将不会触发此事件。

[Description("This event is raised when gauge value changed.")]
public event EventHandler ValueChanged;
private void OnValueChanged()
{
    EventHandler e = ValueChanged;
    if (e != null) e(this, null);
}

历史 

  • 2012/08/28:初始发布(版本 2.0.0)。
© . All rights reserved.