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

(AGauge) WinForms 仪表控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (26投票s)

2012年8月29日

Zlib

1分钟阅读

viewsIcon

172808

downloadIcon

379

(AGauge) WinForms 仪表控件

引言

原始 AGauge 控件

AGauge 是 A.J.Bauer 使用 GDI+ 为 WinForms 创建的仪表控件。原始代码发表在 "Code Project - 一个快速且高性能的仪表" 上。我在这里发布的版本是 AGauge 的改进版本,包含以下更改:

改进

动态仪表标签和仪表范围

仪表标签(以前称为 CapText)和范围的属性被分组到 GaugeRangesGaugeLabels 中,允许我们根据需要创建任意数量的范围和标签。Rangelabel 可以从代码或属性窗口的 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 设置,因为 labelAGaugeLabel 的实例。

添加了 NeedleType 枚举

AGauge 控件具有两种不同的指针设计,可以通过 NeedleType 属性进行选择。NeedleType 属性的类型从 Int3201)更改为枚举类型(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);
  }

许可证

本文以及任何相关的源代码和文件均根据 zlib/libpng 许可证 授权

历史

  • 2012年8月28日:初始发布 (版本 2.0.0)
© . All rights reserved.