Introduction
This is an improved version of AGauge, a WinForm gauge control created by A.J Bauer.
http://www.codeproject.com/Articles/17559/A-fast-and-performing-gauge.
A few changes are made to original codes, details as below.
AGauge_Bin.zip contains compiled DLL and a demo application. Please note that changes are not backward compatible with original code.
Improvements
Dynamic Gauge Label and Gauge Range
Properties for gauge label (previously known as CapText
) and range are grouped into GaugeRanges
and GaugeLabels
which allow us to create any number of range and label as we wish. Range and label can be edited either from code or using the collection editor from the properties window.
[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;
Besides, each label can use different Font settings since label is an instance of AGaugeLabel
.
Added NeedleType Enumeration
AGauge
control has two different type of needle design selectable from NeedleType
property.
Type of NeedleType
property waschanged from Int32
(0 or 1) to enumeration type (NeedleType.Advance
or NeedleType.Simple
) to avoid invalid entry from user.
Events
Update ValueInRangeChangedEvent
ValueInRangeChangedDelegate
was changed to ValueInRangeChangedEvent
to allow multiple subscriptions. The event is changed to trigger
only if value is entering or leaving a defined range. Besides, ValueInRangeChangedEventArgs
was updated to hold current range and gauge value.
[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));
}
public class ValueInRangeChangedEventArgs : EventArgs
{
public AGaugeRange Range { get; private set; }
public Single Value { get; private set; }
public bool InRange { get; private set; }
public ValueInRangeChangedEventArgs(AGaugeRange range, Single value, bool inRange)
{
this.Range = range;
this.Value = value;
this.InRange = inRange;
}
}
Added ValueChangedEvent
The ValueChanged
event is added to notify user whenever gauge value is updated. Note that attempting to set gauge value out of defined gauge range will not trigger this event.
[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);
}
History
- 28/08/2012: Initial release (version 2.0.0).