Click here to Skip to main content
Click here to Skip to main content

An Improved Version of AGauge (A fast and performing gauge)

By , 28 Aug 2012
 

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));
}

/// <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;
    }
}

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).

License

This article, along with any associated source code and files, is licensed under The zlib/libpng License

About the Author

Code Artist
Software Developer (Senior)
Malaysia Malaysia
Member

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionDual Scales and transparent backgroundmemberGeorge papas15 Oct '12 - 14:38 
Questiongauge with two needle [modified]memberMember 87699612 Oct '12 - 21:04 
AnswerRe: gauge with two needlememberCode Artist3 Oct '12 - 3:07 
GeneralMy vote of 5memberOpata Chibueze16 Sep '12 - 14:39 
GeneralRe: My vote of 5memberCode Artist17 Sep '12 - 2:37 
GeneralMy vote of 5memberChristian Amado28 Aug '12 - 12:49 
GeneralRe: My vote of 5memberCode Artist28 Aug '12 - 17:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130516.1 | Last Updated 28 Aug 2012
Article Copyright 2012 by Code Artist
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid