(AGauge) WinForms 仪表控件
(AGauge) WinForms 仪表控件
引言
原始 AGauge 控件
AGauge
是 A.J.Bauer 使用 GDI+ 为 WinForms 创建的仪表控件。原始代码发表在 "Code Project - 一个快速且高性能的仪表" 上。我在这里发布的版本是 AGauge
的改进版本,包含以下更改:
改进
动态仪表标签和仪表范围
仪表标签(以前称为 CapText
)和范围的属性被分组到 GaugeRanges
和 GaugeLabels
中,允许我们根据需要创建任意数量的范围和标签。Range
和 label
可以从代码或属性窗口的 collection
编辑器中进行编辑。
[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;
此外,每个标签可以使用不同的 Font
设置,因为 label
是 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);
}
许可证
本文以及任何相关的源代码和文件均根据 zlib/libpng 许可证 授权
历史
- 2012年8月28日:初始发布 (版本 2.0.0)