AGauge 的改进版本(一个快速、高性能的仪表盘)
基于 AGauge 的改进型 WinForms 仪表控件。
引言
这是 AGauge 的一个改进版本,AGauge 是由 A.J Bauer 创建的一个 WinForm 仪表控件。 https://codeproject.org.cn/Articles/17559/A-fast-and-performing-gauge。 对原始代码进行了一些修改,详情如下:
AGauge_Bin.zip 包含编译后的 DLL 和一个演示应用程序。 请注意,这些更改与原始代码不兼容。
改进
动态仪表标签和仪表范围
仪表标签(以前称为 CapText
)和范围的属性被分组到 GaugeRanges
和 GaugeLabels
中,这使我们能够根据需要创建任意数量的范围和标签。 范围和标签可以从代码或属性窗口的集合编辑器中进行编辑。
[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.Advance
或 NeedleType.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)。