using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using DevComponents.Charts.TextMarkup;
using DevComponents.DotNetBar.Charts.Style;
namespace DevComponents.DotNetBar.Charts
{
    /// 
    /// Represents a Chart Control
    /// 
    [ToolboxItem(true), ToolboxBitmap(typeof(ChartControl), "ChartControl.ico")]
    [Designer("DevComponents.Charts.Design.ChartControlDesigner, DevComponents.Charts.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
    public class ChartControl : Control, INotifyPropertyChanged, IMessageFilter
    {
        #region Events
        #region DataBindingStart
        /// 
        /// Occurs when the Chart is about to start a binding operation
        /// 
        [Description("Occurs when the Chart is about to start a binding operation.")]
        public event EventHandler DataBindingStart;
        #endregion
        #region ChartDataBindingComplete
        /// 
        /// Occurs when a Chart data binding operation is completed
        /// 
        [Description("Occurs when a Chart data binding operation is completed.")]
        public event EventHandler ChartDataBindingComplete;
        #endregion
        #region ChartMatrixResized
        /// 
        /// Occurs when a ChartMatrix has been resized.
        /// 
        [Description("Occurs when a ChartMatrix has been resized.")]
        public event EventHandler ChartMatrixResized;
        #endregion
        #region CompareElements
        /// 
        /// Occurs when the chart needs to compare 1 element with another
        /// 
        [Description("Occurs when the chart needs to compare 1 element with another.")]
        public event EventHandler CompareElements;
        #endregion
        #region EmptyTextMarkupLinkClick
        /// 
        /// Occurs when a ChartContainer's EmptyText MarkupLink has been clicked
        /// 
        [Description("Occurs when a ChartContainer's EmptyText MarkupLink has been clicked.")]
        public event EventHandler EmptyTextMarkupLinkClick;
        #endregion
        #region GetPieCenterLabel
        /// 
        /// Occurs when a Pie Center label is needed
        /// 
        [Description("Occurs when a Pie Center label is needed.")]
        public event EventHandler GetPieCenterLabel;
        #endregion
        #region GetCrosshairAxisLabel
        /// 
        /// Occurs when a Crosshair Axis label is needed
        /// 
        [Description("Occurs when a Crosshair Axis label is needed.")]
        public event EventHandler GetCrosshairAxisLabel;
        #endregion
        #region GetCrosshairLabelHeader
        /// 
        /// Occurs when a CrosshairLabel header is needed
        /// 
        [Description("Occurs when a CrosshairLabel header is needed.")]
        public event EventHandler GetCrosshairLabelHeader;
        #endregion
        #region GetCrosshairLabelItem
        /// 
        /// Occurs when a CrosshairLabel item (text) is needed
        /// 
        [Description("Occurs when a CrosshairLabel item (text) is needed.")]
        public event EventHandler GetCrosshairLabelItem;
        #endregion
        #region GetSliceLabel
        /// 
        /// Occurs when a Pie Slice label (text) is needed
        /// 
        [Description("Occurs when a Pie Slice label (text) is needed.")]
        public event EventHandler GetSliceLabel;
        #endregion
        #region GetTickmarkLabel
        /// 
        /// Occurs when a MajorTickmark label (text and color) is needed
        /// 
        [Description("Occurs when a MajorTickmark label (text and color) is needed.")]
        public event EventHandler GetTickmarkLabel;
        #endregion
        #region GetToolTip
        /// 
        /// Occurs when a Pie SeriesPoint ToolTip is needed
        /// 
        [Description("Occurs when a Pie SeriesPoint ToolTip is needed.")]
        public event EventHandler GetToolTip;
        #endregion
        #region GetElementStyle
        /// 
        /// Occurs when a ChartElement Style is needed.
        /// 
        [Description("Occurs when a ChartElement Style is needed.")]
        public event EventHandler GetElementStyle;
        #endregion
        #region GetPieSeriesPointStyle
        /// 
        /// Occurs when a PieSeriesPoint Style is needed.
        /// 
        [Description("Occurs when a PieSeriesPoint Style is needed.")]
        public event EventHandler GetPieSeriesPointStyle;
        #endregion
        #region LayoutBoundsInvalid
        /// 
        /// Occurs when layout bounds of the item is invalidated.
        /// 
        public event EventHandler LayoutBoundsInvalid;
        #endregion
        #region LegendItemCheckedChanged
        /// 
        /// Occurs when a LegendItem checked state has changed
        /// 
        [Description("Occurs when a LegendItem checked state has changed.")]
        public event EventHandler LegendItemCheckedChanged;
        #endregion
        #region ChartMouseClick
        /// 
        /// Occurs when a single click has ocurred on a chart Pie element.
        /// 
        [Description("Occurs when a single click has ocurred on a chart Pie element.")]
        public event EventHandler ChartMouseClick;
        #endregion
        #region ChartMouseDoubleClick
        /// 
        /// Occurs when a double click has ocurred on a chart Pie element.
        /// 
        [Description("Occurs when a double click has ocurred on a chart Pie element.")]
        public event EventHandler ChartMouseDoubleClick;
        #endregion
        #region PieCenterMarkupLinkClick
        /// 
        /// Occurs after a pie center MarkupLink has been clicked.
        /// 
        [Description("Occurs after a pie center MarkupLink has been clicked.")]
        public event EventHandler PieCenterMarkupLinkClick;
        #endregion
        #region PieDetachChanged
        /// 
        /// Occurs after a pie element detach was performed by the user.
        /// 
        [Description("Occurs after a pie element detach was performed by the user.")]
        public event EventHandler PieDetachChanged;
        #endregion
        #region PieExplodeChanged
        /// 
        /// Occurs after a pie explode operation was performed by the user.
        /// 
        [Description("Occurs after a pie explode operation was performed by the user.")]
        public event EventHandler PieExplodeChanged;
        #endregion
        #region PieRingLevelChanged
        /// 
        /// Occurs after a ring level change, as initiated
        /// by the user, has taken place.
        /// 
        [Description("Occurs after a ring level change, as initiated by the user, has taken place.")]
        public event EventHandler PieRingLevelChanged;
        #endregion
        #region PieRingLevelChanging
        /// 
        /// Occurs after a user has initiated a ring level change, but
        /// before the actual change has taken place.
        /// 
        [Description("Occurs after a user has initiated a ring level change, but before the actual change has taken place.")]
        public event EventHandler PieRingLevelChanging;
        #endregion
        #region PieSelectionChanged
        /// 
        /// Occurs after a pie selection was performed by the user.
        /// 
        [Description("Occurs after a pie selection was performed by the user.")]
        public event EventHandler PieSelectionChanged;
        #endregion
        #region PointLabelUpdate
        /// 
        /// Occurs when a PointLabel update is needed.
        /// 
        [Description("Occurs when a PointLabel update is needed.")]
        public event EventHandler PointLabelUpdate;
        #endregion
        #region PostLoadLegendData
        /// 
        /// Occurs after a Legend's data has been loaded.
        /// 
        [Description("Occurs after a Legend's data has been loaded.")]
        public event EventHandler PostLoadLegendData;
        #endregion
        #region PostRenderContentBackground
        /// 
        /// Occurs after a chart content area has been rendered.
        /// 
        [Description("Occurs after a chart content area has been rendered.")]
        public event EventHandler PostRenderContentBackground;
        #endregion
        #region PostRenderFrameBackground
        /// 
        /// Occurs after a chart Frame area has been rendered.
        /// 
        [Description("Occurs after a chart Frame area has been rendered.")]
        public event EventHandler PostRenderFrameBackground;
        #endregion
        #region PostRenderPanelBackground
        /// 
        /// Occurs after a chart Panel area has been rendered.
        /// 
        [Description("Occurs after a chart Panel area has been rendered.")]
        public event EventHandler PostRenderPanelBackground;
        #endregion
        #region PostRenderPieCenterBackground
        /// 
        /// Occurs after the pie center background has been rendered.
        /// 
        [Description("Occurs after the pie center background has been rendered.")]
        public event EventHandler PostRenderPieCenterBackground;
        #endregion
        #region PostRenderPieCenterContent
        /// 
        /// Occurs after the pie center content has been rendered.
        /// 
        [Description("Occurs after the pie center content has been rendered.")]
        public event EventHandler PostRenderPieCenterContent;
        #endregion
        #region PostRenderPointConnector
        /// 
        /// Occurs after a PointConnector has been rendered
        /// 
        [Description("Occurs after a PointConnector has been rendered.")]
        public event EventHandler PostRenderPointConnector;
        #endregion
        #region PostRenderPointLabel
        /// 
        /// Occurs after a PointLabel has been rendered
        /// 
        [Description("Occurs after a PointLabel has been rendered.")]
        public event EventHandler PostRenderPointLabel;
        #endregion
        #region PostRenderRadialGrid
        /// 
        /// Occurs after a radial grid has been rendered
        /// 
        [Description("Occurs after a radial grid has been rendered.")]
        public event EventHandler PostRenderRadialGrid;
        #endregion
        #region PostRenderSeriesBar
        /// 
        /// Occurs after a series bar has been rendered.
        /// 
        [Description("Occurs after a series bar has been rendered.")]
        public event EventHandler PostRenderSeriesBar;
        #endregion
        #region PostRenderSeriesHiLoBar
        /// 
        /// Occurs after a series HiLo Bar segment has been rendered.
        /// 
        [Description("Occurs after a series HiLo Bar segment has been rendered.")]
        public event EventHandler PostRenderSeriesHiLoBar;
        #endregion
        #region PostRenderSeriesPoint
        /// 
        /// Occurs after a series point has been rendered
        /// 
        [Description("Occurs after a series point has been rendered.")]
        public event EventHandler PostRenderSeriesPoint;
        #endregion
        #region PostRenderSlice
        /// 
        /// Occurs after the pie slice area has been rendered.
        /// 
        [Description("Occurs after the pie slice area has been rendered.")]
        public event EventHandler PostRenderSlice;
        #endregion
        #region PreLoadLegendData
        /// 
        /// Occurs prior to a Legend's data being loaded.
        /// 
        [Description("Occurs prior to a Legend's data being loaded.")]
        public event EventHandler PreLoadLegendData;
        #endregion
        #region PreRenderContentBackground
        /// 
        /// Occurs prior to the chart Content area being rendered.
        /// 
        [Description("Occurs prior to the chart Content area being rendered.")]
        public event EventHandler PreRenderContentBackground;
        #endregion
        #region PreRenderFrameBackground
        /// 
        /// Occurs prior to the chart Frame area being rendered.
        /// 
        [Description("Occurs prior to the chart Frame area being rendered.")]
        public event EventHandler PreRenderFrameBackground;
        #endregion
        #region PreRenderPanelBackground
        /// 
        /// Occurs prior to the chart Panel area being rendered.
        /// 
        [Description("Occurs prior to the chart Panel area being rendered.")]
        public event EventHandler PreRenderPanelBackground;
        #endregion
        #region PreRenderPieCenterBackground
        /// 
        /// Occurs prior to the pie center background being rendered.
        /// 
        [Description("Occurs prior to the pie center background being rendered.")]
        public event EventHandler PreRenderPieCenterBackground;
        #endregion
        #region PreRenderPieCenterContent
        /// 
        /// Occurs prior to the pie center content being rendered.
        /// 
        [Description("Occurs prior to the pie center content being rendered.")]
        public event EventHandler PreRenderPieCenterContent;
        #endregion
        #region PreRenderPointConnector
        /// 
        /// Occurs prior to a PointConnector being rendered
        /// 
        [Description("Occurs prior to a PointConnector being rendered.")]
        public event EventHandler PreRenderPointConnector;
        #endregion
        #region PreRenderPointLabel
        /// 
        /// Occurs prior to a PointLabel being rendered
        /// 
        [Description("Occurs prior to a PointLabel being rendered.")]
        public event EventHandler PreRenderPointLabel;
        #endregion
        #region PreRenderRadialGrid
        /// 
        /// Occurs prior to a radial (circular) grid being rendered.
        /// 
        [Description("Occurs prior to a radial (circular) grid being rendered.")]
        public event EventHandler PreRenderRadialGrid;
        #endregion
        #region PreRenderSeriesBar
        /// 
        /// Occurs prior to a series bar being rendered.
        /// 
        [Description("Occurs prior to a series bar being rendered.")]
        public event EventHandler PreRenderSeriesBar;
        #endregion
        #region PreRenderSeriesHiLoBar
        /// 
        /// Occurs prior to a series HiLo Bar segment being rendered.
        /// 
        [Description("Occurs prior to a series HiLo Bar segment being rendered.")]
        public event EventHandler PreRenderSeriesHiLoBar;
        #endregion
        #region PreRenderSeriesPoint
        /// 
        /// Occurs prior to a series point being rendered
        /// 
        [Description("Occurs prior to a series point being rendered.")]
        public event EventHandler PreRenderSeriesPoint;
        #endregion
        #region PreRenderSlice
        /// 
        /// Occurs prior to the pie slice area being rendered.
        /// 
        [Description("Occurs prior to the pie slice area being rendered.")]
        public event EventHandler PreRenderSlice;
        #endregion
        #region ReferenceLineMarkupLinkClick
        /// 
        /// Occurs when a ReferenceLine MarkupLink has been clicked
        /// 
        [Description("Occurs when a ReferenceLine MarkupLink has been clicked.")]
        public event EventHandler ReferenceLineMarkupLinkClick;
        #endregion
        #region RenderCrosshairCallout
        /// 
        /// Occurs when a Crosshair Callout (enclosing "border") needs to be rendered
        /// 
        [Description("Occurs when a Crosshair Callout (enclosing border) needs to be rendered.")]
        public event EventHandler RenderCrosshairCallout;
        #endregion
        #region RenderCrosshairLabel
        /// 
        /// Occurs when a CrosshairLabel needs to be rendered
        /// 
        [Description("Occurs when a CrosshairLabel needs to be rendered.")]
        public event EventHandler RenderCrosshairLabel;
        #endregion
        #region RenderCrosshairLabelItem
        /// 
        /// Occurs when an individual CrosshairLabel item needs to be rendered
        /// 
        [Description("Occurs when an individual CrosshairLabel item needs to be rendered.")]
        public event EventHandler RenderCrosshairLabelItem;
        #endregion
        #region RenderPieRingOut
        /// 
        /// Occurs when the pie center 'ring-out' indicator needs to be rendered.
        /// 
        [Description("Occurs when the pie center 'ring-out' indicator needs to be rendered.")]
        public event EventHandler RenderPieRingOut;
        #endregion
        #region RenderSliceCenterLine
        /// 
        /// Occurs when a pie slice center line needs to be rendered.
        /// 
        [Description("Occurs when a pie slice center line needs to be rendered.")]
        public event EventHandler RenderSliceCenterLine;
        #endregion
        #region RenderSliceInnerLabel
        /// 
        /// Occurs when a slice inner label needs to be rendered.
        /// 
        [Description("Occurs when a slice inner label needs to be rendered.")]
        public event EventHandler RenderSliceInnerLabel;
        #endregion
        #region RenderSliceOuterLabel
        /// 
        /// Occurs when a slice outer label needs to be rendered.
        /// 
        [Description("Occurs when a slice outer label needs to be rendered.")]
        public event EventHandler RenderSliceOuterLabel;
        #endregion
        #region Scroll
        /// 
        /// Occurs when the Horizontal or Vertical scrollbar has been scrolled
        /// 
        [Description("Occurs when the Horizontal or Vertical scrollbar has been scrolled.")]
        public event EventHandler Scroll;
        #endregion
        #region ScrollMin
        /// 
        /// Occurs when the Horizontal or Vertical
        /// scrollbar has been scrolled to the Minimum and released
        /// 
        [Description("Occurs when the Horizontal or Vertical scrollbar has been scrolled to the Minimum and released.")]
        public event EventHandler ScrollMin;
        #endregion
        #region ScrollMax
        /// 
        /// Occurs when the Horizontal or Vertical scrollbar has been scrolled to the Maximum and released
        /// 
        [Description("Occurs when the Horizontal or Vertical scrollbar has been scrolled to the Maximum and released.")]
        public event EventHandler ScrollMax;
        #endregion
        #region SelectionChanged
        /// 
        /// Occurs when a visual item's selected state has changed
        /// 
        [Description("Occurs when a visual item's selected state has changed.")]
        public event EventHandler SelectionChanged;
        #endregion
        #region SeriesDataBindingComplete
        /// 
        /// Occurs when a ChartSeries data binding operation is completed
        /// 
        [Description("Occurs when a ChartSeries data binding operation is completed.")]
        public event EventHandler SeriesDataBindingComplete;
        #endregion
        #region StyleManagerChanged
        /// 
        /// Occurs when the StyleManager style has changed
        /// 
        [Description("Occurs when the StyleManager style has changed.")]
        public event EventHandler StyleManagerChanged;
        #endregion
        #region TitleMarkupLinkClick
        /// 
        /// Occurs when a title MarkupLink has been clicked
        /// 
        [Description("Occurs when a title MarkupLink has been clicked.")]
        public event EventHandler TitleMarkupLinkClick;
        #endregion
        #endregion
        #region Dll imports
        private const int WmMouseWheel = 0x20a;
        [DllImport("user32.dll")]
        private static extern IntPtr WindowFromPoint(Point pt);
        [DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
        #endregion
        #region Private variables
        private States _States;
        private ChartPanel _ChartPanel;
        private object _DataSource;
        private string _DataMember;
        private DataBinder _DataBinder;
        private DefaultVisualStyles _BaseVisualStyles;
        private DefaultVisualStyles _DefaultVisualStyles;
        private ushort _BeginUpdateCount;
        private ushort _GlobalUpdateCount;
        private ushort _BoundsUpdateCount;
        private bool _InUpdateLayout;
        private bool _LayoutValid;
        private ChartVisualElement _LayoutBoundsItem;
        private Cursor _ChartCursor;
        private Cursor _DefaultCursor = Cursors.Default;
        private bool _SetChartCursor;
        private ChartVisualElement _CapturedItem;
        private ChartVisualElement _MouseOverElement;
        private bool _PostInternalUpdate;
        private int _SelectionUpdateCount;
        private bool _InPostUpdate;
        private System.Windows.Forms.ToolTip _ToolTip;
        private string _ToolTipText;
        #endregion
        /// 
        /// Initializes a new instance of the ChartControl class.
        /// 
        public ChartControl()
        {
            SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint |
                ControlStyles.Opaque | ControlStyles.ResizeRedraw |
                ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor, true);
            InitDefaultStates();
            UpdateChartStyle();
            if (DesignMode == false)
                Application.AddMessageFilter(this);
            StyleManager.Register(this);
        }
        #region DefaultSize
        protected override Size DefaultSize
        {
            get { return new Size(250, 250); }
        }
        #endregion
        #region ScaleControl
        protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
        {
            Dpi.SetScaling(factor);
            base.ScaleControl(factor, specified);
        }
        #endregion
        #region Scale
        /// 
        /// Scales the ChartControl based upon the
        /// parent form AutoScaleDimensions.
        /// 
        /// 
        public void Scale(Form form)
        {
            if (form != null)
            {
                SizeF factor = new SizeF(
                    form.AutoScaleDimensions.Width / 96F,
                    form.AutoScaleDimensions.Height / 96F);
                Scale(factor);
            }
        }
        #endregion
        #region InitDefaultStates
        private void InitDefaultStates()
        {
            //SetState(States.AllowEdit, true);
        }
        #endregion
        #region Public properties
        #region BaseVisualStyles
        ///
        /// BaseVisualStyles - the ChartControl starting base styles
        ///
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public DefaultVisualStyles BaseVisualStyles
        {
            get { return (_BaseVisualStyles); }
            internal set { _BaseVisualStyles = value; }
        }
        #endregion
        #region ChartCursor
        ///
        /// Gets or sets the logical Chart cursor
        ///
        [Browsable(false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public Cursor ChartCursor
        {
            get { return (_ChartCursor); }
            set
            {
                if (value == null || value == Cursors.Default)
                    _ChartCursor = _DefaultCursor;
                else
                    _ChartCursor = value;
            }
        }
        #endregion
        #region ChartPanel
        /// 
        /// Gets or sets the base Chart Panel for the Chart (contains Chart Graphs and additional Chart Panels)
        /// 
        [Category("Appearance")]
        [Description("Indicates the base Chart Panel for the Chart (contains Chart Graphs and additional Chart Panels.")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public ChartPanel ChartPanel
        {
            get
            {
                if (_ChartPanel == null)
                {
                    _ChartPanel = new ChartPanel("PrimaryPanel");
                    _ChartPanel.ChartControl = this;
                    _ChartPanel.PropertyChanged += ChartPanelPropertyChanged;
                }
                return (_ChartPanel);
            }
            set
            {
                if (_ChartPanel != null)
                    _ChartPanel.PropertyChanged -= ChartPanelPropertyChanged;
                _ChartPanel = value;
                if (value != null)
                {
                    _ChartPanel.ChartControl = this;
                    _ChartPanel.PropertyChanged += ChartPanelPropertyChanged;
                }
                OnPropertyChangedEx("ChartPanel", VisualChangeType.Layout);
                LayoutValid = false;
            }
        }
        #region ChartPanelPropertyChanged
        void ChartPanelPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
        }
        #endregion
        #endregion
        #region DataMember
        ///
        /// Gets or sets the name of the list or table
        /// in the data source that the Chart is bound to.
        ///
        [DefaultValue(null), Category("Data")]
        [Description("Indicates the name of the list or table in the data source that the Chart is bound to.")]
        public string DataMember
        {
            get { return (_DataMember); }
            set
            {
                if (_DataBinder != null)
                    _DataBinder.Clear();
                _DataMember = value;
                OnPropertyChangedEx("DataMember", VisualChangeType.Layout);
            }
        }
        #endregion
        #region DataSource
        ///
        /// Gets or sets the data source that the Chart is bound to
        ///
        [DefaultValue(null), AttributeProvider(typeof(IListSource)), Category("Data")]
        [Description("Indicates the data source that the Chart is bound to.")]
        public object DataSource
        {
            get { return (_DataSource); }
            set
            {
                if (_DataBinder != null)
                    _DataBinder.Clear();
                _DataSource = value;
                OnPropertyChangedEx("DataSource", VisualChangeType.Layout);
            }
        }
        #endregion
        #region DefaultVisualStyles
        ///
        /// Gets or sets the Default Visual Styles for each Chart element
        ///
        [Browsable(true), Category("Style")]
        [Description("Gets or sets the Default Visual Styles for the each Invalidate element.")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public DefaultVisualStyles DefaultVisualStyles
        {
            get
            {
                if (_DefaultVisualStyles == null)
                {
                    _DefaultVisualStyles = new DefaultVisualStyles();
                    DefaultVisualChangeHandler(null, _DefaultVisualStyles);
                }
                return (_DefaultVisualStyles);
            }
            set
            {
                if (_DefaultVisualStyles != value)
                {
                    DefaultVisualStyles oldValue = _DefaultVisualStyles;
                    _DefaultVisualStyles = value;
                    OnDefaultVisualStyleChanged(oldValue, value);
                }
            }
        }
        #region OnDefaultVisualStyleChanged
        private void OnDefaultVisualStyleChanged(
            DefaultVisualStyles oldValue, DefaultVisualStyles newValue)
        {
            DefaultVisualChangeHandler(oldValue, newValue);
            OnPropertyChanged("DefaultVisualStyles");
        }
        #endregion
        #region DefaultVisualChangeHandler
        private void DefaultVisualChangeHandler(
            DefaultVisualStyles oldValue, DefaultVisualStyles newValue)
        {
            if (oldValue != null)
                oldValue.PropertyChanged -= DefaultVisualStylesPropertyChanged;
            if (newValue != null)
                newValue.PropertyChanged += DefaultVisualStylesPropertyChanged;
        }
        #region DefaultVisualStylesPropertyChanged
        void DefaultVisualStylesPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            GlobalUpdateCount++;
            VisualChangeType changeType = ((VisualPropertyChangedEventArgs)e).ChangeType;
            if (changeType == VisualChangeType.Layout)
                ChartPanel.InvalidateLayout();
            else
                ChartPanel.InvalidateRender();
        }
        #endregion
        #endregion
        #endregion
        #region IsUpdateSuspended
        ///
        /// Gets whether Chart updating / rendering is suspended
        ///
        [Browsable(false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public bool IsUpdateSuspended
        {
            get { return (_BeginUpdateCount > 0); }
        }
        #endregion
        #region SelectedItems
        /// 
        /// Gets a list of the currently selected chart items.
        /// 
        [Browsable(false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public List SelectedItems
        {
            get
            {
                List selectedItems = new List(_SelectedItems);
                return (selectedItems);
            }
        }
        #endregion
        #region ToolTip
        internal System.Windows.Forms.ToolTip ToolTip
        {
            get
            {
                if (_ToolTip == null)
                    _ToolTip = new System.Windows.Forms.ToolTip();
                return (_ToolTip);
            }
        }
        #endregion
        #region ToolTipText
        internal string ToolTipText
        {
            get { return (_ToolTipText); }
            set
            {
                if (_ToolTipText != value)
                {
                    _ToolTipText = value;
                    ToolTip.SetToolTip(this, value);
                    ToolTip.Active =
                        (string.IsNullOrEmpty(value) == false);
                }
            }
        }
        #endregion
        #endregion
        #region Internal properties
        #region BoundsUpdateCount
        internal ushort BoundsUpdateCount
        {
            get { return (_BoundsUpdateCount); }
            set { _BoundsUpdateCount = value; }
        }
        #endregion
        #region CapturedItem
        internal ChartVisualElement CapturedItem
        {
            get
            {
                if (Capture == false)
                    _CapturedItem = null;
                return (_CapturedItem);
            }
            set { Capture = ((_CapturedItem = value) != null); }
        }
        #endregion
        #region DataBinder
        internal DataBinder DataBinder
        {
            get { return (_DataBinder); }
            set { _DataBinder = value; }
        }
        #endregion
        #region DefaultCursor
        internal new Cursor DefaultCursor
        {
            get { return (_DefaultCursor); }
            set { _DefaultCursor = value; }
        }
        #endregion
        #region DesignerHosted
        internal bool DesignerHosted
        {
            get { return (DesignMode); }
        }
        #endregion
        #region GlobalUpdateCount
        internal ushort GlobalUpdateCount
        {
            get { return (_GlobalUpdateCount); }
            set { _GlobalUpdateCount = value; }
        }
        #endregion
        #region InUpdateLayout
        internal bool InUpdateLayout
        {
            get { return (_InUpdateLayout); }
        }
        #endregion
        #region IsPointLabelUpdateHooked
        internal bool IsPointLabelUpdateHooked
        {
            get { return (PointLabelUpdate != null); }
        }
        #endregion
        #region IsScrollHooked
        internal bool IsScrollHooked
        {
            get { return (Scroll != null); }
        }
        #endregion
        #region LayoutBoundsItem
        internal ChartVisualElement LayoutBoundsItem
        {
            get { return (_LayoutBoundsItem); }
            set
            {
                _LayoutBoundsItem = value;
                OnLayoutBoundsInvalid(EventArgs.Empty);
            }
        }
        #region OnLayoutBoundsInvalid
        /// 
        /// Raises LayoutBoundsInvalid event.
        /// 
        /// Provides event arguments.
        protected virtual void OnLayoutBoundsInvalid(EventArgs e)
        {
            if (LayoutBoundsInvalid != null)
                LayoutBoundsInvalid(this, e);
        }
        #endregion
        #endregion
        #region LayoutValid
        internal bool LayoutValid
        {
            get { return (_LayoutValid); }
            set { _LayoutValid = value; }
        }
        #endregion
        #region MouseOverElement
        internal ChartVisualElement MouseOverElement
        {
            get { return (_MouseOverElement); }
            set { _MouseOverElement = value; }
        }
        #endregion
        #region PostInternalUpdate
        internal bool PostInternalUpdate
        {
            get { return (_PostInternalUpdate); }
            set { _PostInternalUpdate = value; }
        }
        #endregion
        #region SelectionUpdateCount
        internal int SelectionUpdateCount
        {
            get { return (_SelectionUpdateCount); }
            set { _SelectionUpdateCount = value; }
        }
        #endregion
        #region SetChartCursor
        internal bool SetChartCursor
        {
            get { return (_SetChartCursor); }
            set { _SetChartCursor = value; }
        }
        #endregion
        #endregion
        #region Licensing
#if !TRIAL
        private string _LicenseKey = "";
        [Browsable(false), DefaultValue("")]
        public string LicenseKey
        {
            get { return _LicenseKey; }
            set
            {
                if (Licensing.ValidateLicenseKey(value) == false)
                    _LicenseKey = (!Licensing.CheckLicenseKey(value) ? "9dsjkhds7" : value);
            }
        }
#endif
        #endregion
        #region OnEnabledChanged
        /// 
        /// OnEnabledChanged
        /// 
        /// 
        protected override void OnEnabledChanged(EventArgs e)
        {
            base.OnEnabledChanged(e);
            Refresh();
        }
        #endregion
        #region StyleManager support
        #region StyleManagerStyleChanged
        /// 
        /// Called by StyleManager to notify control that style on
        /// manager has changed and that control should refresh its
        /// appearance if its style is controlled by StyleManager.
        /// 
        /// New active style.
        [EditorBrowsable(EditorBrowsableState.Never)]
        public void StyleManagerStyleChanged(eDotNetBarStyle newStyle)
        {
            UpdateChartStyle();
        }
        #endregion
        #region UpdateChartStyle
        private void UpdateChartStyle()
        {
            ChartControlStyle style = ChartControlStyle.Office2010Blue;
            switch (StyleManager.Style)
            {
                case eStyle.Office2007VistaGlass:
                case eStyle.VisualStudio2010Blue:
                case eStyle.Windows7Blue:
                case eStyle.Office2007Blue:
                case eStyle.Office2010Blue:
                    style = ChartControlStyle.Office2010Blue;
                    break;
                case eStyle.Office2007Black:
                case eStyle.Office2010Black:
                    style = ChartControlStyle.Office2010Black;
                    break;
                case eStyle.Office2007Silver:
                case eStyle.Office2010Silver:
                    style = ChartControlStyle.Office2010Silver;
                    break;
                case eStyle.Metro:
                case eStyle.VisualStudio2012Dark:
                case eStyle.VisualStudio2012Light:
                    style = ChartControlStyle.Metro;
                    break;
            }
            _BaseVisualStyles = VisualStylesTable.GetStyle(style);
            if (IsHandleCreated == true)
            {
                Invalidate(true);
                if (StyleManagerChanged != null)
                    StyleManagerChanged(this, new EventArgs());
            }
        }
        #endregion
        #endregion
        #region Paint processing
        #region OnPaint
        /// 
        /// Renders the control.
        /// 
        /// Paint arguments.
        protected override void OnPaint(PaintEventArgs e)
        {
            if (IsUpdateSuspended == false)
            {
                SmoothingMode sm = e.Graphics.SmoothingMode;
                TextRenderingHint th = e.Graphics.TextRenderingHint;
                base.OnPaintBackground(e);
                if (LayoutValid == false || LayoutBoundsItem != null)
                    UpdateLayout(e.Graphics);
                ChartRenderInfo renderInfo = GetRenderInfo(e);
                PaintControl(renderInfo);
                e.Graphics.SmoothingMode = sm;
                e.Graphics.TextRenderingHint = th;
                base.OnPaint(e);
            }
        }
        #endregion
        #region PaintControl
        private void PaintControl(ChartRenderInfo renderInfo)
        {
            if (ChartPanel.Visible == true)
                ChartPanel.Render(renderInfo);
        }
        #endregion
        #region PaintTo
        /// 
        /// Paints control to canvas. This method might be used for print output.
        /// 
        /// Graphics object to paint control to.
        public void PaintTo(Graphics g)
        {
            PaintTo(g, ClientRectangle);
        }
        /// 
        /// Paints control to canvas. This method might be used for print output.
        /// 
        /// Graphics object to paint control to.
        /// Indicates clipping rectangle.
        public void PaintTo(Graphics g, Rectangle clipRectangle)
        {
            SmoothingMode sm = g.SmoothingMode;
            TextRenderingHint th = g.TextRenderingHint;
            if (LayoutValid == false || LayoutBoundsItem != null)
                UpdateLayout(g);
            ChartRenderInfo renderInfo = GetRenderInfo(g, clipRectangle);
            PaintControl(renderInfo);
            g.SmoothingMode = sm;
            g.TextRenderingHint = th;
        }
        #endregion
        #endregion
        #region UpdateLayout
        /// 
        /// OnHandleCreated
        /// 
        /// 
        protected override void OnHandleCreated(EventArgs e)
        {
            UpdateLayout(false);
            base.OnHandleCreated(e);
        }
        /// 
        /// Performs Chart layout.
        /// 
        public void UpdateLayout()
        {
            UpdateLayout(false);
        }
        /// 
        /// Performs Chart layout.
        /// 
        ///Whether to force operation even if layout is valid.
        public void UpdateLayout(bool force)
        {
            if (force == true)
                _LayoutValid = false;
            if (_LayoutValid == false || LayoutBoundsItem != null)
            {
                if (_InUpdateLayout == false)
                {
                    using (Graphics g = CreateGraphics())
                        UpdateLayout(g);
                }
            }
        }
        internal ushort LayoutUpdateCount
        {
            get { return (_LayoutUpdateCount); }
        }
        internal ushort _LayoutUpdateCount;
        private void UpdateLayout(Graphics g)
        {
            if (ChartPanel.Visible == true)
            {
                if (_InUpdateLayout == false)
                {
                    _InUpdateLayout = true;
                    _LayoutUpdateCount++;
                    try
                    {
                        ChartLayoutInfo layoutInfo = GetLayoutInfo(g);
                        if (_LayoutValid == false)
                        {
                            ChartPanel.Measure(layoutInfo);
                            layoutInfo.ClientBounds.Width = Math.Max(0, layoutInfo.ClientBounds.Width);
                            layoutInfo.ClientBounds.Height = Math.Max(0, layoutInfo.ClientBounds.Height);
                            _LayoutValid = true;
                            _LayoutBoundsItem = ChartPanel;
                            PostInternalMouseMove();
                        }
                        if (LayoutBoundsItem != null)
                        {
                            layoutInfo = GetLayoutInfo(g);
                            layoutInfo.ScrollOffset = GetScrollOffset();
                            LayoutBoundsItem.Arrange(layoutInfo);
                        }
                        LayoutBoundsItem = null;
                    }
                    finally
                    {
                        _InUpdateLayout = false;
                        // If the user initiated an action during the paint event that
                        // resulted in a layout change, process it now, as our associated 
                        // invalidation will be eaten by the Windows event system
                        if (PostInternalUpdate == true)
                        {
                            PostInternalUpdate = false;
                            if (_InPostUpdate == false)
                            {
                                _InPostUpdate = true;
                                _LayoutValid = false;
                                UpdateLayout(g);
                                _InPostUpdate = false;
                            }
                        }
                    }
                }
            }
        }
        #region GetScrollOffset
        private Point GetScrollOffset()
        {
            ChartContainer cc = LayoutBoundsItem.ParentChartContainer;
            if (cc != null)
            {
                Point pt = cc.ScrollOffset;
                if (LayoutBoundsItem is ChartLegend == false)
                {
                    pt.X += cc.HScrollOffset;
                    pt.Y += cc.VScrollOffset;
                }
                return (pt);
            }
            return (Point.Empty);
        }
        #endregion
        #region GetLayoutInfo
        private ChartLayoutInfo GetLayoutInfo(Graphics g)
        {
            ChartLayoutInfo layoutInfo = new ChartLayoutInfo(g, ClientRectangle);
            Rectangle r = ClientRectangle;
            layoutInfo.LayoutBounds = ClientRectangle;
            return (layoutInfo);
        }
        #endregion
        #region GetRenderInfo
        private ChartRenderInfo GetRenderInfo(PaintEventArgs e)
        {
            ChartRenderInfo renderInfo =
                new ChartRenderInfo(e.Graphics, Rectangle.Ceiling(e.ClipRectangle));
            return (renderInfo);
        }
        private ChartRenderInfo GetRenderInfo(Graphics g, Rectangle clipRectangle)
        {
            ChartRenderInfo renderInfo =
                new ChartRenderInfo(g, Rectangle.Ceiling(clipRectangle));
            return (renderInfo);
        }
        #endregion
        #endregion
        #region DoEvent support
        #region ChartMatrixResizedEvent
        /// 
        /// Handles invocation of ChartMatrixResized events
        /// 
        internal void DoChartMatrixResizedEvent(ChartPanel chartPanel)
        {
            if (ChartMatrixResized != null)
            {
                ChartMatrixResizedEventArgs ev = new
                    ChartMatrixResizedEventArgs(chartPanel);
                ChartMatrixResized(this, ev);
            }
        }
        #endregion
        #region ChartTitleMarkupLinkClickEvent
        /// 
        /// Handles invocation of ChartTitleMarkupLinkClick events
        /// 
        internal void DoChartTitleMarkupLinkClickEvent(ChartNote title, HyperLink hyperLink)
        {
            if (TitleMarkupLinkClick != null)
            {
                ChartTitleMarkupLinkClickEventArgs ev = new 
                    ChartTitleMarkupLinkClickEventArgs(title, hyperLink.Name, hyperLink.HRef);
                TitleMarkupLinkClick(this, ev);
            }
        }
        #endregion
        #region DataBindingStartEvent
        /// 
        /// Handles invocation of DataBindingStart events
        /// 
        internal bool DoDataBindingStartEvent(
            BaseChart chartBase, object source, ref bool autogen)
        {
            if (DataBindingStart != null)
            {
                ChartDataBindingStartEventArgs ev = new
                    ChartDataBindingStartEventArgs(chartBase, source, autogen);
                DataBindingStart(this, ev);
                autogen = ev.AutoGenerateSeries;
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region ChartDataBindingCompleteEvent
        /// 
        /// Handles invocation of ChartDataBindingComplete events
        /// 
        internal void DoChartDataBindingCompleteEvent(BaseChart chartBase, object source)
        {
            if (ChartDataBindingComplete != null)
            {
                ChartDataBindingCompleteEventArgs ev = new
                    ChartDataBindingCompleteEventArgs(chartBase, source);
                ChartDataBindingComplete(this, ev);
            }
        }
        #endregion
        #region ChartMouseClickEvent
        internal bool DoChartMouseClickEvent(BaseChart baseChart, PieSeriesPoint item, MouseEventArgs e)
        {
            if (ChartMouseClick != null)
            {
                ChartMouseClickEventArgs ev = new
                    ChartMouseClickEventArgs(baseChart, item, e);
                ChartMouseClick(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region ChartMouseDoubleClickEvent
        /// 
        /// Handles invocation of ChartMouseDoubleClick events
        /// 
        internal bool DoChartMouseDoubleClickEvent(BaseChart baseChart,
            ItemHitArea hitArea, ChartVisualElement hitElement, object hitItem, MouseEventArgs e)
        {
            if (ChartMouseDoubleClick != null)
            {
                ChartMouseDoubleClickEventArgs ev = new
                    ChartMouseDoubleClickEventArgs(baseChart, hitArea, hitElement, hitItem, e);
                ChartMouseDoubleClick(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region CompareElementsEvent
        /// 
        /// Handles invocation of CompareElementsEvent events
        /// 
        internal bool DoCompareElementsEvent(
            ChartVisualElement chartElement, object a, object b, ref int result)
        {
            if (CompareElements != null)
            {
                ChartCompareElementsEventArgs ev = new
                    ChartCompareElementsEventArgs(chartElement, a, b);
                CompareElements(this, ev);
                result = ev.Result;
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region EmptyTextMarkupLinkClickEvent
        /// 
        /// Handles invocation of EmptyTextMarkupLinkClick events
        /// 
        internal void DoEmptyTextMarkupLinkClickEvent(ChartContainer container, HyperLink hyperLink)
        {
            if (EmptyTextMarkupLinkClick != null)
            {
                ChartEmptyTextMarkupLinkClickEventArgs ev = new
                    ChartEmptyTextMarkupLinkClickEventArgs(container, hyperLink.Name, hyperLink.HRef);
                EmptyTextMarkupLinkClick(this, ev);
            }
        }
        #endregion
        #region GetPieCenterLabelEvent
        internal void DoGetPieCenterLabelEvent(PieChart pieChart, ref string text)
        {
            if (GetPieCenterLabel != null)
            {
                GetPieCenterLabelEventArgs ev = new
                    GetPieCenterLabelEventArgs(pieChart, text);
                GetPieCenterLabel(this, ev);
                text = ev.LabelText;
            }
        }
        #endregion
        #region GetCrosshairAxisLabelEvent
        internal void DoGetCrosshairAxisLabelEvent(
            ChartAxis axis, object value, ref string labelText)
        {
            if (GetCrosshairAxisLabel != null)
            {
                GetCrosshairAxisLabelEventArgs ev = new
                    GetCrosshairAxisLabelEventArgs(axis, value, labelText);
                GetCrosshairAxisLabel(this, ev);
                labelText = ev.LabelText;
            }
        }
        #endregion
        #region GetCrosshairLabelHeaderEvent
        internal void DoGetCrosshairLabelHeaderEvent(
            BaseChart chart, CrosshairPoint cp, List cps, ref string text)
        {
            if (GetCrosshairLabelHeader != null)
            {
                GetCrosshairLabelHeaderEventArgs ev = new
                    GetCrosshairLabelHeaderEventArgs(chart, cp, cps, text);
                GetCrosshairLabelHeader(this, ev);
                text = ev.Text;
            }
        }
        #endregion
        #region GetCrosshairLabelItemEvent
        internal void DoGetCrosshairLabelItemEvent(
            BaseChart chart, CrosshairPoint cp, ref string text)
        {
            if (GetCrosshairLabelItem != null)
            {
                GetCrosshairLabelItemEventArgs ev = new
                    GetCrosshairLabelItemEventArgs(chart, cp, text);
                GetCrosshairLabelItem(this, ev);
                text = ev.Text;
            }
        }
        #endregion
        #region GetElementStyleEvent
        /// 
        /// Handles invocation of GetElementStyle events
        /// 
        internal void DoGetElementStyleEvent(
            ChartElement chartElement, StyleType styleType, ref BaseVisualStyle style)
        {
            if (GetElementStyle != null)
            {
                ChartGetElementStyleEventArgs ev = new
                    ChartGetElementStyleEventArgs(chartElement, styleType, style);
                GetElementStyle(this, ev);
                style = ev.Style;
            }
        }
        #endregion
        #region GetElementStyleEvent
        /// 
        /// Handles invocation of GetElementStyle events
        /// 
        internal void DoGetPieSeriesPointStyleEvent(
            PieSeriesPoint pieSeriesPoint, StyleType styleType, ref BaseVisualStyle style)
        {
            if (GetPieSeriesPointStyle != null)
            {
                ChartGetPieSeriesPointStyleEventArgs ev = new
                    ChartGetPieSeriesPointStyleEventArgs(pieSeriesPoint, styleType, style);
                GetPieSeriesPointStyle(this, ev);
                style = ev.Style;
            }
        }
        #endregion
        #region GetSliceLabelEvent
        internal bool DoGetSliceLabelEvent(PieChart pieChart,
            PieSeries chartSeries, PieSeriesPoint psp, bool inner, ref string text)
        {
            if (GetSliceLabel != null)
            {
                GetSliceLabelEventArgs ev = new
                    GetSliceLabelEventArgs(pieChart, chartSeries, psp, inner, text);
                GetSliceLabel(this, ev);
                text = ev.Text;
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region GetTickmarkLabelEvent
        internal void DoGetTickmarkLabelEvent(
            ChartAxis axis, object value, ref string labelText, ref Color labelColor)
        {
            if (GetTickmarkLabel != null)
            {
                GetTickmarkLabelEventArgs ev = new
                    GetTickmarkLabelEventArgs(axis, value, labelText);
                GetTickmarkLabel(this, ev);
                labelText = ev.LabelText;
                labelColor = ev.LabelColor;
            }
        }
        #endregion
        #region GetToolTipEvent
        /// 
        /// Handles invocation of GetToolTipEvent events
        /// 
        internal bool DoGetToolTipEvent(BaseChart baseChart,
            BaseSeries baseSeries, SeriesPoint sp, ref string toolTip)
        {
            if (GetToolTip != null)
            {
                GetToolTipEventArgs ev = new
                    GetToolTipEventArgs(baseChart, baseSeries, sp, toolTip);
                GetToolTip(this, ev);
                toolTip = ev.ToolTip;
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region LegendItemCheckedChanged
        /// 
        /// Handles invocation of LegendItemCheckedChanged events
        /// 
        internal void DoLegendItemCheckedChangedEvent(
            ChartLegend legend, ChartLegendItem legendItem)
        {
            if (LegendItemCheckedChanged != null)
            {
                LegendItemCheckedChangedEventArgs ev = new
                    LegendItemCheckedChangedEventArgs(legend, legendItem);
                LegendItemCheckedChanged(this, ev);
            }
        }
        #endregion
        #region PointLabelUpdateEvent
        /// 
        /// Handles invocation of PointLabelUpdate events
        /// 
        internal void DoPointLabelUpdateEvent(
            BaseChart chart, ChartSeries chartSeries, List pointLabels)
        {
            if (PointLabelUpdate != null)
            {
                ChartPointLabelUpdateEventArgs ev = new
                    ChartPointLabelUpdateEventArgs(chart, chartSeries, pointLabels);
                PointLabelUpdate(this, ev);
            }
        }
        #endregion
        #region PieCenterMarkupLinkClick Event
        /// 
        /// Handles invocation of PieCenterMarkupLinkClick events
        /// 
        internal void DoPieCenterMarkupLinkClickEvent(
            PieChart pieChart, HyperLink hyperLink)
        {
            if (PieCenterMarkupLinkClick != null)
            {
                PieCenterMarkupLinkClickEventArgs ev = new PieCenterMarkupLinkClickEventArgs(
                    pieChart, hyperLink.Name, hyperLink.HRef);
                PieCenterMarkupLinkClick(this, ev);
            }
        }
        #endregion
        #region PieDetachChangedEvent
        internal void DoPieDetachChangedEvent(
            PieChart pieChart, PieSeries pieSeries, PieSelectionMode psm)
        {
            if (PieDetachChanged != null)
            {
                PieDetachChangedEventArgs ev = new
                    PieDetachChangedEventArgs(pieChart, pieSeries, psm);
                PieDetachChanged(this, ev);
            }
        }
        #endregion
        #region PieExplodeChangedEvent
        internal void DoPieExplodeChangedEvent(PieChart pieChart, PieSeries pieSeries)
        {
            if (PieExplodeChanged != null)
            {
                PieExplodeChangedEventArgs ev = new
                    PieExplodeChangedEventArgs(pieChart, pieSeries);
                PieExplodeChanged(this, ev);
            }
        }
        #endregion
        #region PieRingLevelChanged
        internal void DoPieRingLevelChangedEvent(
            PieChart pieChart, PieSeriesPointCollection spcOld, PieSeriesPointCollection spcNew)
        {
            if (PieRingLevelChanged != null)
            {
                PieRingLevelChangedEventArgs ev = new
                    PieRingLevelChangedEventArgs(pieChart, spcOld, spcNew);
                PieRingLevelChanged(this, ev);
            }
        }
        #endregion
        #region PieRingLevelChanging
        internal bool DoPieRingLevelChangingEvent(
            PieChart pieChart, PieSeriesPointCollection spcOld, PieSeriesPointCollection spcNew)
        {
            if (PieRingLevelChanging != null)
            {
                PieRingLevelChangingEventArgs ev = new
                    PieRingLevelChangingEventArgs(pieChart, spcOld, spcNew);
                PieRingLevelChanging(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PieSelectionChangedEvent
        internal void DoPieSelectionChangedEvent(
            PieChart pieChart, PieSeries pieSeries, PieSeriesPoint psp, PieSelectionMode psm)
        {
            if (PieSelectionChanged != null)
            {
                PieSelectionChangedEventArgs ev = new
                    PieSelectionChangedEventArgs(pieChart, pieSeries, psp, psm);
                PieSelectionChanged(this, ev);
            }
        }
        #endregion
        #region PostLoadLegendDataEvent
        internal void DoPostLoadLegendDataEvent(ChartLegend legend)
        {
            if (PostLoadLegendData != null)
            {
                PostLoadLegendDataEventArgs ev = new
                    PostLoadLegendDataEventArgs(legend);
                PostLoadLegendData(this, ev);
            }
        }
        #endregion
        #region PostRenderContentBackgroundEvent
        internal void DoPostRenderContentBackgroundEvent(Graphics g, BaseChart chart, Rectangle r)
        {
            if (PostRenderContentBackground != null)
            {
                PostRenderContentBackgroundEventArgs ev = new
                    PostRenderContentBackgroundEventArgs(g, chart, r);
                PostRenderContentBackground(this, ev);
            }
        }
        #endregion
        #region PostRenderFrameBackgroundEvent
        internal void DoPostRenderFrameBackgroundEvent(Graphics g, BaseChart chart, Rectangle r)
        {
            if (PostRenderFrameBackground != null)
            {
                PostRenderFrameBackgroundEventArgs ev = new
                    PostRenderFrameBackgroundEventArgs(g, chart, r);
                PostRenderFrameBackground(this, ev);
            }
        }
        #endregion
        #region PostRenderPanelBackgroundEvent
        internal void DoPostRenderPanelBackgroundEvent(Graphics g, ChartPanel panel, Rectangle r)
        {
            if (PostRenderPanelBackground != null)
            {
                PostRenderPanelBackgroundEventArgs ev = new
                    PostRenderPanelBackgroundEventArgs(g, panel, r);
                PostRenderPanelBackground(this, ev);
            }
        }
        #endregion
        #region PostRenderPieCenterBackgroundEvent
        internal void DoPostRenderPieCenterBackgroundEvent(
            Graphics g, PieChart pieChart, Rectangle rc)
        {
            if (PostRenderPieCenterBackground != null)
            {
                PostRenderPieCenterBackgroundEventArgs ev = new
                    PostRenderPieCenterBackgroundEventArgs(g, pieChart, rc);
                PostRenderPieCenterBackground(this, ev);
            }
        }
        #endregion
        #region PostRenderPieCenterContentEvent
        internal void DoPostRenderPieCenterContentEvent(
            Graphics g, PieChart pieChart, Rectangle rt, string centerlabel)
        {
            if (PostRenderPieCenterContent != null)
            {
                PostRenderPieCenterContentEventArgs ev = new
                    PostRenderPieCenterContentEventArgs(g, pieChart, rt, centerlabel);
                PostRenderPieCenterContent(this, ev);
            }
        }
        #endregion
        #region PostRenderPointConnectorEvent
        internal void DoPostRenderPointConnectorEvent(Graphics g, BaseChart chart,
            ChartSeries series, PointLabel pointLabel, bool isCrosshairPt, Point dataPt, Point labelPt)
        {
            if (PostRenderPointConnector != null)
            {
                PostRenderPointConnectorEventArgs ev = new
                    PostRenderPointConnectorEventArgs(g, chart, series, pointLabel, isCrosshairPt, dataPt, labelPt);
                PostRenderPointConnector(this, ev);
            }
        }
        #endregion
        #region PostRenderPointLabelEvent
        internal void DoPostRenderPointLabelEvent(Graphics g, BaseChart chart,
            ChartSeries series, PointLabel pointLabel, bool isCrosshairPt, Rectangle bounds)
        {
            if (PostRenderPointLabel != null)
            {
                PostRenderPointLabelEventArgs ev = new
                    PostRenderPointLabelEventArgs(g, chart, series, pointLabel, isCrosshairPt, bounds);
                PostRenderPointLabel(this, ev);
            }
        }
        #endregion
        #region PostRenderRadialGridEvent
        internal void DoPostRenderRadialGridEvent(Graphics g,
            PieChart pieChart, double outerRadius, double innerRadius, double exp)
        {
            if (PostRenderRadialGrid != null)
            {
                PostRenderRadialGridEventArgs ev = new
                    PostRenderRadialGridEventArgs(g, pieChart, outerRadius, innerRadius, exp);
                PostRenderRadialGrid(this, ev);
            }
        }
        #endregion
        #region PostRenderSeriesBarEvent
        internal void DoPostRenderSeriesBarEvent(Graphics g, BaseChart chart,
            ChartSeries chartSeries, SeriesPoint sp, Rectangle r, Rectangle r2, BarSegment segment)
        {
            if (PostRenderSeriesBar != null)
            {
                PostRenderSeriesBarEventArgs ev = new
                    PostRenderSeriesBarEventArgs(g, chart, chartSeries, sp, r, r2, segment);
                PostRenderSeriesBar(this, ev);
            }
        }
        #endregion
        #region PostRenderSeriesHiLoBarEvent
        internal void DoPostRenderSeriesHiLoBarEvent(Graphics g, ChartXy chartXy,
            ChartSeries chartSeries, HiLoRenderData rd, Point pt1, Point pt2, HiLoBarSegment segment)
        {
            if (PostRenderSeriesHiLoBar != null)
            {
                PostRenderSeriesHiLoBarEventArgs ev = new
                    PostRenderSeriesHiLoBarEventArgs(g, chartXy, chartSeries, rd, pt1, pt2, segment);
                PostRenderSeriesHiLoBar(this, ev);
            }
        }
        #endregion
        #region PostRenderSeriesPointEvent
        internal void DoPostRenderSeriesPointEvent(Graphics graphics, BaseChart chart,
            ChartSeries chartSeries, SeriesPoint sp, Point pt, Size pointSize, Image marker)
        {
            if (PostRenderSeriesPoint != null)
            {
                PostRenderSeriesPointEventArgs ev = new
                    PostRenderSeriesPointEventArgs(graphics, chart, chartSeries, sp, pt, pointSize, marker);
                PostRenderSeriesPoint(this, ev);
            }
        }
        #endregion
        #region PostRenderSliceEvent
        internal void DoPostRenderSliceEvent(Graphics g, GraphicsPath path,
            PieChart pieChart, PieSeries pieSeries, PieSeriesPoint psp, SliceRenderType rtype)
        {
            if (PostRenderSlice != null)
            {
                PostRenderSliceEventArgs ev = new
                    PostRenderSliceEventArgs(g, path, pieChart, pieSeries, psp, rtype);
                PostRenderSlice(this, ev);
            }
        }
        #endregion
        #region PreLoadLegendDataEvent
        internal bool DoPreLoadLegendDataEvent(ChartLegend legend)
        {
            if (PreLoadLegendData != null)
            {
                PreLoadLegendDataEventArgs ev = new
                    PreLoadLegendDataEventArgs(legend);
                PreLoadLegendData(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderContentBackgroundEvent
        internal bool DoPreRenderContentBackgroundEvent(Graphics g, BaseChart chart, Rectangle r)
        {
            if (PreRenderContentBackground != null)
            {
                PreRenderContentBackgroundEventArgs ev = new
                    PreRenderContentBackgroundEventArgs(g, chart, r);
                PreRenderContentBackground(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderFrameBackgroundEvent
        internal bool DoPreRenderFrameBackgroundEvent(Graphics g, BaseChart chart, Rectangle r)
        {
            if (PreRenderFrameBackground != null)
            {
                PreRenderFrameBackgroundEventArgs ev = new
                    PreRenderFrameBackgroundEventArgs(g, chart, r);
                PreRenderFrameBackground(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderPanelBackgroundEvent
        internal bool DoPreRenderPanelBackgroundEvent(Graphics g, ChartPanel panel, Rectangle r)
        {
            if (PreRenderPanelBackground != null)
            {
                PreRenderPanelBackgroundEventArgs ev = new
                    PreRenderPanelBackgroundEventArgs(g, panel, r);
                PreRenderPanelBackground(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderPieCenterBackgroundEvent
        internal bool DoPreRenderPieCenterBackgroundEvent(
            Graphics g, PieChart pieChart, Rectangle rc)
        {
            if (PreRenderPieCenterBackground != null)
            {
                PreRenderPieCenterBackgroundEventArgs ev = new
                    PreRenderPieCenterBackgroundEventArgs(g, pieChart, rc);
                PreRenderPieCenterBackground(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderPieCenterContentEvent
        internal bool DoPreRenderPieCenterContentEvent(
            Graphics g, PieChart pieChart, Rectangle rt, string centerlabel)
        {
            if (PreRenderPieCenterContent != null)
            {
                PreRenderPieCenterContentEventArgs ev = new
                    PreRenderPieCenterContentEventArgs(g, pieChart, rt, centerlabel);
                PreRenderPieCenterContent(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderPointConnectorEvent
        internal bool DoPreRenderPointConnectorEvent(Graphics g, BaseChart chart,
            ChartSeries series, PointLabel pointLabel, bool isCrosshairPt, Point dataPt, Point labelPt)
        {
            if (PreRenderPointConnector != null)
            {
                PreRenderPointConnectorEventArgs ev = new
                    PreRenderPointConnectorEventArgs(g, chart, series, pointLabel, isCrosshairPt, dataPt, labelPt);
                PreRenderPointConnector(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderPointLabelEvent
        internal bool DoPreRenderPointLabelEvent(Graphics g, BaseChart chart,
            ChartSeries series, PointLabel pointLabel, bool isCrosshairPt, Rectangle bounds)
        {
            if (PreRenderPointLabel != null)
            {
                PreRenderPointLabelEventArgs ev = new
                    PreRenderPointLabelEventArgs(g, chart, series, pointLabel, isCrosshairPt, bounds);
                PreRenderPointLabel(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderRadialGridEvent
        internal bool DoPreRenderRadialGridEvent(Graphics g,
            PieChart pieChart, double outerRadius, double innerRadius, double exp)
        {
            if (PreRenderRadialGrid != null)
            {
                PreRenderRadialGridEventArgs ev = new
                    PreRenderRadialGridEventArgs(g, pieChart, outerRadius, innerRadius, exp);
                PreRenderRadialGrid(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderSeriesBarEvent
        internal bool DoPreRenderSeriesBarEvent(Graphics g, BaseChart chart,
            ChartSeries chartSeries, SeriesPoint sp, Rectangle r, Rectangle r2, BarSegment segment)
        {
            if (PreRenderSeriesBar != null)
            {
                PreRenderSeriesBarEventArgs ev = new
                    PreRenderSeriesBarEventArgs(g, chart, chartSeries, sp, r, r2, segment);
                PreRenderSeriesBar(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderSeriesHiloBarEvent
        internal bool DoPreRenderSeriesHiloBarEvent(Graphics g, ChartXy chartXy,
            ChartSeries chartSeries, HiLoRenderData rd, Point pt1, Point pt2, HiLoBarSegment segment)
        {
            if (PreRenderSeriesHiLoBar != null)
            {
                PreRenderSeriesHiLoBarEventArgs ev = new
                    PreRenderSeriesHiLoBarEventArgs(g, chartXy, chartSeries, rd, pt1, pt2, segment);
                PreRenderSeriesHiLoBar(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region PreRenderSeriesPointEvent
        internal bool DoPreRenderSeriesPointEvent(Graphics graphics, BaseChart chart, 
            ChartSeries chartSeries, SeriesPoint sp, Point pt, Size pointSize, ref Image marker)
        {
            if (PreRenderSeriesPoint != null)
            {
                PreRenderSeriesPointEventArgs ev = new
                    PreRenderSeriesPointEventArgs(graphics, chart, chartSeries, sp, pt, pointSize, marker);
                PreRenderSeriesPoint(this, ev);
                marker = ev.Marker;
                return (ev.Cancel || marker == null);
            }
            return (false);
        }
        #endregion
        #region PreRenderSliceEvent
        internal bool DoPreRenderSliceEvent(Graphics g, GraphicsPath path,
            PieChart pieChart, PieSeries pieSeries, PieSeriesPoint psp, SliceRenderType rtype)
        {
            if (PreRenderSlice != null)
            {
                PreRenderSliceEventArgs ev = new
                    PreRenderSliceEventArgs(g, path, pieChart, pieSeries, psp, rtype);
                PreRenderSlice(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region ReferenceLineMarkupLinkClickEvent
        /// 
        /// Handles invocation of ReferenceLineMarkupLinkClick events
        /// 
        internal void DoReferenceLineMarkupLinkClickEvent(ReferenceLine line, HyperLink hyperLink)
        {
            if (ReferenceLineMarkupLinkClick != null)
            {
                ReferenceLineMarkupLinkClickEventArgs ev = new
                    ReferenceLineMarkupLinkClickEventArgs(line, hyperLink.Name, hyperLink.HRef);
                ReferenceLineMarkupLinkClick(this, ev);
            }
        }
        #endregion
        #region RenderCrosshairCalloutEvent
        /// 
        /// Handles invocation of RenderCrosshairCallout events
        /// 
        internal bool DoRenderCrosshairCalloutEvent(Graphics graphics,
            BaseChart chart, Rectangle bounds, Point pt, CrosshairVisualStyle cstyle)
        {
            if (RenderCrosshairCallout != null)
            {
                RenderCrosshairCalloutEventArgs ev = new
                    RenderCrosshairCalloutEventArgs(graphics, chart, bounds, pt, cstyle);
                RenderCrosshairCallout(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region RenderCrosshairLabelEvent
        /// 
        /// Handles invocation of RenderCrosshairLabel events
        /// 
        internal bool DoRenderCrosshairLabelEvent(Graphics graphics,
            BaseChart chart, List cps, Rectangle bounds, Point pt)
        {
            if (RenderCrosshairLabel != null)
            {
                RenderCrosshairLabelEventArgs ev = new
                    RenderCrosshairLabelEventArgs(graphics, chart, cps, bounds, pt);
                RenderCrosshairLabel(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region RenderCrosshairLabelItemEvent
        /// 
        /// Handles invocation of RenderCrosshairLabelItem events
        /// 
        internal bool DoRenderCrosshairLabelItemEvent(Graphics graphics,
            BaseChart chart, CrosshairPoint cp, Rectangle bounds, CrosshairVisualStyle cstyle)
        {
            if (RenderCrosshairLabelItem != null)
            {
                RenderCrosshairLabelItemEventArgs ev = new
                    RenderCrosshairLabelItemEventArgs(graphics, chart, cp, bounds, cstyle);
                RenderCrosshairLabelItem(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region RenderPieRingOutEvent
        internal bool DoRenderPieRingOutEvent(Graphics g, PieChart pieChart, Rectangle r)
        {
            if (RenderPieRingOut != null)
            {
                RenderPieRingOutEventArgs ev = new
                    RenderPieRingOutEventArgs(g, pieChart, r);
                RenderPieRingOut(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region RenderSliceCenterLineEvent
        internal bool DoRenderSliceCenterLineEvent(Graphics g,
            PieChart pieChart, PieSeriesPoint psp, Point ptInner, Point ptOuter)
        {
            if (RenderSliceCenterLine != null)
            {
                RenderSliceCenterLineEventArgs ev = new
                    RenderSliceCenterLineEventArgs(g, pieChart, psp, ptInner, ptOuter);
                RenderSliceCenterLine(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region RenderSliceInnerLabelEvent
        internal bool DoRenderSliceInnerLabelEvent(Graphics g,
            PieChart pieChart, PieSeriesPoint psp, string text, ref bool displayed)
        {
            if (RenderSliceInnerLabel != null)
            {
                RenderSliceInnerLabelEventArgs ev = new
                    RenderSliceInnerLabelEventArgs(g, pieChart, psp, text, displayed);
                RenderSliceInnerLabel(this, ev);
                displayed = ev.Displayed;
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region RenderSliceOuterLabelEvent
        internal bool DoRenderSliceOuterLabelEvent(
            Graphics g, PieChart pieChart, PieSeriesPoint psp, PieLabel pl)
        {
            if (RenderSliceOuterLabel != null)
            {
                RenderSliceOuterLabelEventArgs ev = new
                    RenderSliceOuterLabelEventArgs(g, pieChart, psp, pl);
                RenderSliceOuterLabel(this, ev);
                return (ev.Cancel);
            }
            return (false);
        }
        #endregion
        #region ScrollEvent
        /// 
        /// Handles invocation of Scroll events
        /// 
        internal void DoScrollEvent(ChartContainer chartContainer,
            ScrollEventArgs args, ScrollBarLite sbar)
        {
            if (Scroll != null)
            {
                ChartScrollEventArgs ev = new
                    ChartScrollEventArgs(chartContainer, args);
                Scroll(this, ev);
            }
            if (args.Type == ScrollEventType.EndScroll)
            {
                if (args.NewValue == 0)
                    DoScrollMaxEvent(chartContainer, args);
                else if (args.NewValue + sbar.LargeChange >= sbar.Maximum)
                    DoScrollMaxEvent(chartContainer, args);
            }
        }
        #endregion
        #region ScrollMinEvent
        /// 
        /// Handles invocation of ScrollMin events
        /// 
        internal void DoScrollMinEvent(ChartContainer chartContainer, ScrollEventArgs args)
        {
            if (ScrollMin != null)
            {
                ChartScrollEventArgs ev = new
                    ChartScrollEventArgs(chartContainer, args);
                ScrollMin(this, ev);
            }
        }
        #endregion
        #region ScrollMaxEvent
        /// 
        /// Handles invocation of ScrollMax events
        /// 
        internal void DoScrollMaxEvent(ChartContainer chartContainer, ScrollEventArgs args)
        {
            if (ScrollMax != null)
            {
                ChartScrollEventArgs ev = new
                    ChartScrollEventArgs(chartContainer, args);
                ScrollMax(this, ev);
            }
        }
        #endregion
        #region SelectionChanged
        /// 
        /// Handles invocation of SelectionChanged events
        /// 
        internal void DoSelectionChangedEvent(
            ChartVisualElement item, bool oldState, bool newState)
        {
            if (SelectionChanged != null)
            {
                SelectionChangedEventArgs ev = new
                    SelectionChangedEventArgs(item, oldState, newState, _SelectedItems.Count);
                SelectionChanged(this, ev);
            }
        }
        #endregion
        #region SeriesDataBindingCompleteEvent
        /// 
        /// Handles invocation of SeriesDataBindingComplete events
        /// 
        internal void DoSeriesDataBindingCompleteEvent(BaseChart chartBase, BaseSeries series, object source)
        {
            if (SeriesDataBindingComplete != null)
            {
                SeriesDataBindingCompleteEventArgs ev = new
                    SeriesDataBindingCompleteEventArgs(chartBase, series, source);
                SeriesDataBindingComplete(this, ev);
            }
        }
        #endregion
        #endregion
        #region Mouse Support
        #region OnMouseLeave
        /// 
        /// OnMouseLeave
        /// 
        /// 
        protected override void OnMouseLeave(EventArgs e)
        {
            _ChartPanel.InternalMouseLeave(e);
            if (_MouseOverElement != null)
            {
                _MouseOverElement.InternalMouseLeave(e);
                _MouseOverElement = null;
            }
            base.OnMouseLeave(e);
        }
        #endregion
        #region OnMouseMove
        /// 
        /// OnMouseMove
        /// 
        /// 
        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (CapturedItem != null)
            {
                CapturedItem.InternalMouseMove(e);
            }
            else
            {
                ChartVisualElement item = _ChartPanel.GetElementAt(e.Location);
                if (item != null)
                    item.InternalMouseMove(e);
                else
                    _ChartPanel.InternalMouseMove(e);
            }
            base.OnMouseMove(e);
            base.Cursor = _ChartCursor;
            if (_ChartPanel.IsDesignerHosted == true)
                Cursor = Cursors.Arrow;
        }
        #endregion
        #region OnMouseDown
        /// 
        /// OnMouseDown
        /// 
        /// 
        protected override void OnMouseDown(MouseEventArgs e)
        {
            Focus();
            ChartVisualElement item = _ChartPanel.GetElementAt(e.Location);
            if (item != null)
                item.InternalMouseDown(e);
            else
                _ChartPanel.InternalMouseDown(e);
            base.OnMouseDown(e);
        }
        #endregion
        #region OnMouseUp
        /// 
        /// OnMouseUp
        /// 
        /// 
        protected override void OnMouseUp(MouseEventArgs e)
        {
            if (CapturedItem != null)
            {
                CapturedItem.InternalMouseUp(e);
            }
            else
            {
                ChartVisualElement item = _ChartPanel.GetElementAt(e.Location);
                if (item != null)
                    item.InternalMouseUp(e);
                else
                    _ChartPanel.InternalMouseUp(e);
            }
            base.OnMouseUp(e);
        }
        #endregion
        #region OnMouseClick
        /// 
        /// OnMouseClick
        /// 
        /// 
        protected override void OnMouseClick(MouseEventArgs e)
        {
            if (_MouseOverElement == null)
            {
                ChartVisualElement item = _ChartPanel.GetElementAt(e.Location);
                if (item != null)
                    item.InternalMouseMove(e);
                else
                    _ChartPanel.InternalMouseMove(e);
            }
            if (_MouseOverElement != null)
                _MouseOverElement.InternalMouseClick(e);
            base.OnMouseClick(e);
        }
        #endregion
        #region OnMouseDoubleClick
        /// 
        /// OnMouseDoubleClick
        /// 
        /// 
        protected override void OnMouseDoubleClick(MouseEventArgs e)
        {
            if (_MouseOverElement == null)
            {
                ChartVisualElement item = _ChartPanel.GetElementAt(e.Location);
                if (item != null)
                    item.InternalMouseMove(e);
                else
                    _ChartPanel.InternalMouseMove(e);
            }
            if (_MouseOverElement != null)
                _MouseOverElement.InternalMouseDoubleClick(e);
            base.OnMouseDoubleClick(e);
        }
        #endregion
        #endregion
        #region GetElementAt
        public ChartVisualElement GetElementAt(Point pt)
        {
            ChartVisualElement item = ChartPanel.GetElementAt(pt);
            return (item ?? ChartPanel);
        }
        #endregion
        #region GetSerialData
        internal SerialElementCollection GetSerialData(bool root)
        {
            SerialElementCollection sec = new SerialElementCollection();
            if (root == true)
                sec.AddStartElement("ChartControl");
            sec.AddValue("DataMember", DataMember, null);
            //sec.AddValue("DataSource", DataSource, null);
            if (_DefaultVisualStyles != null && _DefaultVisualStyles.IsEmpty == false)
                sec.AddElement(_DefaultVisualStyles.GetSerialData());
            sec.AddElement(ChartPanel.GetSerialData(""));
            if (root == true)
                sec.AddEndElement("ChartControl");
            return (sec);
        }
        #endregion
        #region PostInternalMouseMove
        internal void PostInternalMouseMove()
        {
            Point pt = PointToClient(Control.MousePosition);
            if (ClientRectangle.Contains(pt) == true)
                Cursor.Position = Cursor.Position;
        }
        #endregion
        #region Cursor
        /// 
        /// Cursor
        /// 
        public override Cursor Cursor
        {
            get { return (base.Cursor); }
            set
            {
                base.Cursor = value;
                if (SetChartCursor == true)
                    ChartCursor = value;
                else
                    DefaultCursor = value;
            }
        }
        #endregion
        #region OnResize
        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            if (ChartPanel != null)
                ChartPanel.InternalOnResize(e);
        }
        #endregion
        #region Selection Support
        private List _SelectedItems = new List();
        public bool GetSelected(ChartContainer item)
        {
            if (item.ChartControl == null)
                throw new Exception("Items must be a member of the ChartControl");
            return (_SelectedItems.IndexOf(item) >= 0);
        }
        public void SetSelected(ChartContainer item, bool select)
        {
            SetSelectedEx(item, select, true);
        }
        #region SetSelectedEx
        internal void SetSelectedEx(ChartContainer item, bool select, bool sendEvent)
        {
            int index = _SelectedItems.IndexOf(item);
            if (select == false)
            {
                if (index >= 0)
                {
                    _SelectedItems.RemoveAt(index);
                    item.IsSelected = false;
                    if (sendEvent == true)
                        OnSelectionChanged(item, true, false);
                }
            }
            else
            {
                if (index < 0)
                {
                    _SelectedItems.Add(item);
                    item.IsSelected = true;
                    if (sendEvent == true)
                        OnSelectionChanged(item, false, true);
                }
            }
        }
        #region OnSelectionChanged
        private void OnSelectionChanged(ChartContainer item, bool oldState, bool newState)
        {
            DoSelectionChangedEvent(item, oldState, newState);
        }
        #endregion
        #endregion
        #region ClearAllSelected
        /// 
        /// Clears all selected items
        /// 
        public void ClearAllSelected()
        {
            for (int i=_SelectedItems.Count - 1; i>=0; i--)
                SetSelectedEx(_SelectedItems[i], false, true);
        }
        #endregion
        #endregion
        #region Update support
        ///
        /// Calling the BeginUpdate routine informs the Chart Control
        /// that an extended update phase has begun. The Chart Control
        /// will suspend all layout calculations and display updates
        /// until the corresponding EndUpdate routine is called.
        /// 
        /// BeginUpdate / EndUpdate can be nested and must be
        /// called in pairs – every BeginUpdate must have a
        /// matching EndUpdate call.
        ///
        public void BeginUpdate()
        {
            _BeginUpdateCount++;
        }
        ///
        /// Calling the EndUpdate routine informs the Chart Control
        /// that an extended update phase has ended.
        /// 
        /// BeginUpdate / EndUpdate can be nested and must be
        /// called in pairs – every EndUpdate must have a
        /// matching BeginUpdate call.
        ///
        public void EndUpdate()
        {
            if (_BeginUpdateCount > 0)
            {
                if (--_BeginUpdateCount == 0)
                    ChartPanel.InvalidateLayout();
            }
        }
        #endregion
        #region InvalidateRender
        /// 
        /// Invalidates render of the chart element.
        /// 
        /// Element to invalidate rendering for.
        internal void InvalidateRender(ChartVisualElement chartElement)
        {
            Rectangle bounds = chartElement.Bounds;
            if (bounds.IsEmpty == false)
                Invalidate(bounds, true);
        }
        internal void InvalidateRender(Rectangle bounds)
        {
            Invalidate(bounds, InvokeRequired == false);
        }
        #endregion
        #region PreFilterMessage
        public bool PreFilterMessage(ref Message m)
        {
            if (IsDisposed == true)
                return (false);
            if (DesignMode == true || Enabled == false)
                return (false);
            if (ContainsFocus == true || m.Msg == WmMouseWheel)
            {
                if (m.Msg == WmMouseWheel)
                {
                    Point pt = new Point(LoWord(m.LParam), HiWord(m.LParam));
                    IntPtr hWnd = WindowFromPoint(pt);
                    if (hWnd != IntPtr.Zero)
                    {
                        Control ctl = Control.FromHandle(hWnd);
                        if (ctl == this)
                        {
                            pt = PointToClient(pt);
                            MouseEventArgs e = new
                                MouseEventArgs(MouseButtons.None, 0, pt.X, pt.Y, HiWord(m.WParam));
                            ChartVisualElement item = _ChartPanel.GetElementAt(pt);
                            if (item != null)
                                item.InternalMouseWheel(e);
                            else
                                _ChartPanel.InternalMouseWheel(e);
                            return (true);
                        }
                    }
                }
            }
            return (false);
        }
        #region HiWord / LoWord
        private int LoWord(int n)
        {
            return (short)(n & 0xffff);
        }
        private int HiWord(int n)
        {
            return (n >> 0x10);
        }
        private int LoWord(IntPtr n)
        {
            return LoWord((int)((long)n));
        }
        private int HiWord(IntPtr n)
        {
            return HiWord((int)((long)n));
        }
        #endregion
        #endregion
        #region INotifyPropertyChanged Members
        /// 
        /// Occurs when property value has changed.
        /// 
        public event PropertyChangedEventHandler PropertyChanged;
        /// 
        /// Default PropertyChanged processing
        /// 
        /// 
        /// invalidate
        protected void OnPropertyChangedEx(string s, VisualChangeType changeType)
        {
            OnPropertyChanged(s);
            if (changeType == VisualChangeType.Layout)
                Invalidate();
            else
                Invalidate();
        }
        /// 
        /// Raises the PropertyChanged event.
        /// 
        /// Event arguments
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, e);
        }
        /// 
        /// Default PropertyChanged processing
        /// 
        /// 
        protected void OnPropertyChanged(string s)
        {
            if (PropertyChanged != null)
                OnPropertyChanged(new PropertyChangedEventArgs(s));
        }
        #endregion
        #region States
        [Flags]
        private enum States : uint
        {
        }
        #region TestState
        private bool TestState(States state)
        {
            return ((_States & state) == state);
        }
        #endregion
        #region SetState
        private void SetState(States state, bool value)
        {
            if (value == true)
                _States |= state;
            else
                _States &= ~state;
        }
        #endregion
        #endregion
    }
    #region enum
    #region AutoScrollEnable
    [Flags]
    internal enum AutoScrollEnable
    {
        None = 0,
        Vertical = (1 << 0),
        Horizontal = (1 << 1),
    }
    #endregion
    #region SortDirection
    public enum SortDirection
    {
        None = 0,
        Ascending = 1,
        Descending = 2,
    }
    #endregion
    #endregion
    #region EventArgs
    #region ChartCancelEventArgs
    /// 
    /// ChartCancelEventArgs
    /// 
    public class ChartCancelEventArgs : ChartEventArgs
    {
        #region Private variables
        private bool _Cancel;
        #endregion
        ///
        /// ChartCancelEventArgs
        ///
        ///Associated Chart
        public ChartCancelEventArgs(BaseChart chartBase)
            : base(chartBase)
        {
        }
        #region Public properties
        /// 
        /// Gets or sets whether to cancel the default operation.
        /// 
        public bool Cancel
        {
            get { return (_Cancel); }
            set { _Cancel = value; }
        }
        #endregion
    }
    #endregion
    #region GridCompareElementsEventArgs
    /// 
    /// GridCompareElementsEventArgs
    /// 
    public class ChartCompareElementsEventArgs : CancelEventArgs
    {
        #region Private variables
        private ChartVisualElement _ChartElement;
        private object _ElementA;
        private object _ElementB;
        private int _Result;
        #endregion
        ///
        /// ChartCompareElementsEventArgs
        ///
        ///
        ///
        ///
        public ChartCompareElementsEventArgs(
            ChartVisualElement chartElement, object a, object b)
        {
            _ChartElement = chartElement;
            _ElementA = a;
            _ElementB = b;
        }
        #region Public properties
        /// 
        /// Gets the visual ChartElement associated with the sort.
        /// 
        public ChartVisualElement ChartElement
        {
            get { return (_ChartElement); }
        }
        /// 
        /// Gets the left-hand element of the comparison
        /// 
        public object ElementA
        {
            get { return (_ElementA); }
        }
        /// 
        /// Gets the right-hand element of the comparison
        /// 
        public object ElementB
        {
            get { return (_ElementB); }
        }
        /// 
        /// Gets or sets the result of the element compare.
        /// -1 = ElementA is less than ElementB
        /// 0 = ElementA is equal to ElementB
        /// +1 = ElementA is greater than ElementB
        /// 
        public int Result
        {
            get { return (_Result); }
            set { _Result = value; }
        }
        #endregion
    }
    #endregion
    #region ChartEventArgs
    /// 
    /// ChartEventArgs
    /// 
    public class ChartEventArgs : EventArgs
    {
        #region Private variables
        private BaseChart _Chart;
        #endregion
        ///
        /// ChartControlEventArgs
        ///
        ///Associated ChartControl
        public ChartEventArgs(BaseChart chart)
        {
            _Chart = chart;
        }
        #region Public properties
        /// 
        /// Gets the associated Chart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        #endregion
    }
    #endregion
    #region ChartDataBindingCompleteEventArgs
    /// 
    /// ChartDataBindingCompleteEventArgs
    /// 
    public class ChartDataBindingCompleteEventArgs : ChartEventArgs
    {
        #region Private variables
        private object _Source;
        #endregion
        ///
        /// ChartDataBindingCompleteEventArgs
        ///
        ///
        public ChartDataBindingCompleteEventArgs(BaseChart chart, object source)
            : base(chart)
        {
            _Source = source;
        }
        #region Public properties
        /// 
        /// Gets the data source that was bound to.
        /// 
        public object Source
        {
            get { return (_Source); }
        }
        #endregion
    }
    #endregion
    #region ChartDataBindingStartEventArgs
    /// 
    /// ChartDataBindingStartEventArgs
    /// 
    public class ChartDataBindingStartEventArgs : ChartCancelEventArgs
    {
        #region Private variables
        private bool _AutoGenerateSeries;
        private object _Source;
        #endregion
        ///
        /// ChartDataBindingStartEventArgs
        ///
        ///Associated ChartControl
        ///Associated ChartPanel
        ///The data source being bound to
        ///Whether to auto-generate panel series
        public ChartDataBindingStartEventArgs(
            BaseChart chartBase, object source, bool autoGenerateSeries)
            : base(chartBase)
        {
            _Source = source;
            _AutoGenerateSeries = autoGenerateSeries;
        }
        #region Public properties
        /// 
        /// Gets or sets whether to auto-generate
        /// the the panel series from the bound data.
        /// 
        public bool AutoGenerateSeries
        {
            get { return (_AutoGenerateSeries); }
            set { _AutoGenerateSeries = value; }
        }
        /// 
        /// Gets the associated data source being bound to.
        /// 
        public object Source
        {
            get { return (_Source); }
        }
        #endregion
    }
    #endregion
    #region ChartEmptyTextMarkupLinkClickEventArgs
    /// 
    /// ChartEmptyTextMarkupLinkClickEventArgs
    /// 
    public class ChartEmptyTextMarkupLinkClickEventArgs : EventArgs
    {
        #region Private variables
        private string _HRef;
        private string _Name;
        private ChartContainer _ChartContainer;
        #endregion
        /// 
        /// ChartEmptyTextMarkupLinkClickEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        public ChartEmptyTextMarkupLinkClickEventArgs(
            ChartContainer chartContainer, string name, string href)
        {
            _HRef = href;
            _Name = name;
            _ChartContainer = chartContainer;
        }
        #region Public properties
        /// 
        /// Gets the associated HyperLink HRef
        /// 
        public string HRef
        {
            get { return (_HRef); }
        }
        /// 
        /// Gets the associated HyperLink Name
        /// 
        public string Name
        {
            get { return (_Name); }
        }
        /// 
        /// Gets the associated ChartContainer
        /// 
        public ChartContainer ChartContainer
        {
            get { return (_ChartContainer); }
        }
        #endregion
    }
    #endregion
    #region ChartGetElementStyleEventArgs
    /// 
    /// ChartGetElementStyleEventArgs
    /// 
    public class ChartGetElementStyleEventArgs : EventArgs
    {
        #region Private variables
        private ChartElement _ChartElement;
        private StyleType _StyleType;
        private BaseVisualStyle _Style;
        #endregion
        ///
        /// ChartGetElementStyleEventArgs
        ///
        public ChartGetElementStyleEventArgs(
            ChartElement chartElement, StyleType styleType, BaseVisualStyle style)
        {
            _ChartElement = chartElement;
            _StyleType = styleType;
            _Style = style;
        }
        #region Public properties
        /// 
        /// Gets the ChartElement.
        /// 
        public ChartElement ChartElement
        {
            get { return (_ChartElement); }
        }
        /// 
        /// Gets the StyleType.
        /// 
        public StyleType StyleType
        {
            get { return (_StyleType); }
        }
        /// 
        /// Gets the Style.
        /// 
        public BaseVisualStyle Style
        {
            get { return (_Style); }
            set
            {
                if (value == null)
                    throw new Exception("Style cannot be null.");
                _Style = value;
            }
        }
        #endregion
    }
    #endregion
    #region ChartGetPieSeriesPointStyleEventArgs
    /// 
    /// ChartGetPieSeriesPointStyleEventArgs
    /// 
    public class ChartGetPieSeriesPointStyleEventArgs : EventArgs
    {
        #region Private variables
        private PieSeriesPoint _PieSeriesPoint;
        private StyleType _StyleType;
        private BaseVisualStyle _Style;
        #endregion
        /// 
        /// ChartGetPieSeriesPointStyleEventArgs
        /// 
        /// 
        /// 
        /// 
        public ChartGetPieSeriesPointStyleEventArgs(
            PieSeriesPoint pieSeriesPoint, StyleType styleType, BaseVisualStyle style)
        {
            _PieSeriesPoint = pieSeriesPoint;
            _StyleType = styleType;
            _Style = style;
        }
        #region Public properties
        /// 
        /// Gets the PieSeriesPoint.
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (_PieSeriesPoint); }
        }
        /// 
        /// Gets the StyleType.
        /// 
        public StyleType StyleType
        {
            get { return (_StyleType); }
        }
        /// 
        /// Gets the Style.
        /// 
        public BaseVisualStyle Style
        {
            get { return (_Style); }
            set
            {
                if (value == null)
                    throw new Exception("Style cannot be null.");
                _Style = value;
            }
        }
        #endregion
    }
    #endregion
    #region ChartMatrixResizedEventArgs
    /// 
    /// ChartMatrixResizedEventArgs
    /// 
    public class ChartMatrixResizedEventArgs : EventArgs
    {
        #region Private variables
        private ChartPanel _ChartPanel;
        #endregion
        /// 
        /// ChartMatrixResizedEventArgs
        /// 
        /// 
        public ChartMatrixResizedEventArgs(ChartPanel chartPanel)
        {
            _ChartPanel = chartPanel;
        }
        #region Public properties
        /// 
        /// Gets the associated ChartPanel
        /// 
        public ChartPanel ChartPanel
        {
            get { return (_ChartPanel); }
        }
        #endregion
    }
    #endregion
    #region ChartMouseClickEventArgs
    /// 
    /// ChartMouseClickEventArgs
    /// 
    public class ChartMouseClickEventArgs : CancelEventArgs
    {
        #region Private variables
        private BaseChart _BaseChart;
        private object _HitItem;
        private MouseEventArgs _MouseEventArgs;
        #endregion
        /// 
        /// ChartMouseClickEventArgs
        /// 
        /// 
        /// 
        /// 
        public ChartMouseClickEventArgs(BaseChart baseChart, object item, MouseEventArgs e)
        {
            _BaseChart = baseChart;
            _HitItem = item;
            _MouseEventArgs = e;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart BaseChart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated hit item.
        /// 
        public object HitItem
        {
            get { return (_HitItem); }
        }
        /// 
        /// Gets the associated MouseEventArgs
        /// 
        public MouseEventArgs MouseEventArgs
        {
            get { return (_MouseEventArgs); }
        }
        #endregion
    }
    #endregion
    #region ChartMouseDoubleClickEventArgs
    /// 
    /// ChartMouseDoubleClickEventArgs
    /// 
    public class ChartMouseDoubleClickEventArgs : CancelEventArgs
    {
        #region Private variables
        private BaseChart _BaseChart;
        private ItemHitArea _HitArea;
        private ChartVisualElement _HitElement;
        private object _HitItem;
        private MouseEventArgs _MouseEventArgs;
        #endregion
        /// 
        /// ChartMouseDoubleClickEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        public ChartMouseDoubleClickEventArgs(BaseChart baseChart,
            ItemHitArea hitArea, ChartVisualElement hitElement, object hitItem, MouseEventArgs e)
        {
            _BaseChart = baseChart;
            _HitArea = hitArea;
            _HitItem = hitItem;
            _HitElement = hitElement;
            _MouseEventArgs = e;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart BaseChart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated hit area.
        /// 
        public ItemHitArea HitArea
        {
            get { return (_HitArea); }
        }
        /// 
        /// Gets the associated hit item.
        /// 
        public object HitItem
        {
            get { return (_HitItem); }
        }
        /// 
        /// Gets the associated hit Visual Chart Element.
        /// 
        public ChartVisualElement HitElement
        {
            get { return (_HitElement); }
        }
        /// 
        /// Gets the associated MouseEventArgs
        /// 
        public MouseEventArgs MouseEventArgs
        {
            get { return (_MouseEventArgs); }
        }
        #endregion
    }
    #endregion
    #region ChartPanelCancelEventArgs
    /// 
    /// ChartPanelCancelEventArgs
    /// 
    public class ChartPanelCancelEventArgs : ChartPanelEventArgs
    {
        #region Private variables
        private bool _Cancel;
        #endregion
        ///
        /// ChartPanelCancelEventArgs
        ///
        ///Associated ChartControl
        ///Associated ChartPanel
        public ChartPanelCancelEventArgs(ChartPanel chartPanel)
            : base(chartPanel)
        {
        }
        #region Public properties
        /// 
        /// Gets or sets whether to cancel the default operation.
        /// 
        public bool Cancel
        {
            get { return (_Cancel); }
            set { _Cancel = value; }
        }
        #endregion
    }
    #endregion
    #region ChartPanelEventArgs
    /// 
    /// ChartPanelEventArgs
    /// 
    public class ChartPanelEventArgs : EventArgs
    {
        #region Private variables
        private ChartPanel _ChartPanel;
        #endregion
        ///
        /// ChartPanelEventArgs
        ///
        ///Associated ChartControl
        ///Associated ChartPanel
        public ChartPanelEventArgs(ChartPanel chartPanel)
        {
            _ChartPanel = chartPanel;
        }
        #region Public properties
        /// 
        /// Gets the associated ChartPanel
        /// 
        public ChartPanel ChartPanel
        {
            get { return (_ChartPanel); }
        }
        #endregion
    }
    #endregion
    #region ChartPointLabelUpdateEventArgs
    /// 
    /// ChartPointLabelUpdateEventArgs
    /// 
    public class ChartPointLabelUpdateEventArgs : EventArgs
    {
        #region Private variables
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private List _PointLabels;
        #endregion
        ///
        /// ChartPointLabelUpdateEventArgs
        ///
        public ChartPointLabelUpdateEventArgs(
            BaseChart chart, ChartSeries chartSeries, List pointLabels)
        {
            _Chart = chart;
            _ChartSeries = chartSeries;
            _PointLabels = pointLabels;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart.
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries.
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated list of PointLabels.
        /// 
        public List PointLabels
        {
            get { return (_PointLabels); }
        }
        #endregion
    }
    #endregion
    #region ChartScrollEventArgs
    /// 
    /// ChartScrollEventArgs
    /// 
    public class ChartScrollEventArgs : EventArgs
    {
        #region Private variables
        private ChartContainer _ChartContainer;
        private ScrollEventArgs _ScrollEventArgs;
        #endregion
        ///
        /// ChartScrollEventArgs
        ///
        ///
        ///
        public ChartScrollEventArgs(
            ChartContainer chartContainer, ScrollEventArgs scrollEventArgs)
        {
            _ChartContainer = chartContainer;
            _ScrollEventArgs = scrollEventArgs;
        }
        #region Public properties
        /// 
        /// Gets the ChartContainer that was scrolled
        /// 
        public ChartContainer ChartContainer
        {
            get { return (_ChartContainer); }
        }
        /// 
        /// Gets the scroll event args
        /// 
        public ScrollEventArgs ScrollEventArgs
        {
            get { return (_ScrollEventArgs); }
        }
        #endregion
    }
    #endregion
    #region ChartScrollBarValueChangedEventArgs
    /// 
    /// ChartScrollBarValueChangedEventArgs
    /// 
    public class ChartScrollBarValueChangedEventArgs : EventArgs
    {
        #region Private variables
        private ChartContainer _ChartContainer;
        private int _OldValue;
        private int _NewValue;
        #endregion
        ///
        /// ChartScrollBarValueChangedEventArgs
        ///
        ///
        ///
        ///
        public ChartScrollBarValueChangedEventArgs(
            ChartContainer chartContainer, int oldValue, int newValue)
        {
            _ChartContainer = chartContainer;
            _OldValue = oldValue;
            _NewValue = newValue;
        }
        #region Public properties
        /// 
        /// Gets the associated ChartContainer
        /// 
        public ChartContainer ChartContainer
        {
            get { return (_ChartContainer); }
        }
        /// 
        /// Gets the old scroll Value
        /// 
        public int OldValue
        {
            get { return (_OldValue); }
        }
        /// 
        /// Gets the new scroll Value
        /// 
        public int NewValue
        {
            get { return (_NewValue); }
        }
        #endregion
    }
    #endregion
    #region ChartTitleMarkupLinkClickEventArgs
    /// 
    /// ChartTitleMarkupLinkClickEventArgs
    /// 
    public class ChartTitleMarkupLinkClickEventArgs : EventArgs
    {
        #region Private variables
        private string _HRef;
        private string _Name;
        private ChartNote _Title;
        #endregion
        /// 
        /// ChartTitleMarkupLinkClickEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        public ChartTitleMarkupLinkClickEventArgs(
            ChartNote title, string name, string href)
        {
            _HRef = href;
            _Name = name;
            _Title = title;
        }
        #region Public properties
        /// 
        /// Gets the associated HyperLink HRef
        /// 
        public string HRef
        {
            get { return (_HRef); }
        }
        /// 
        /// Gets the associated HyperLink Name
        /// 
        public string Name
        {
            get { return (_Name); }
        }
        /// 
        /// Gets the associated Title
        /// 
        public ChartNote Title
        {
            get { return (_Title); }
        }
        #endregion
    }
    #endregion
    #region GetCrosshairAxisLabelEventArgs
    /// 
    /// GetCrosshairAxisLabelEventArgs
    /// 
    public class GetCrosshairAxisLabelEventArgs : EventArgs
    {
        #region Private variables
        private ChartAxis _ChartAxis;
        private object _Value;
        private string _LabelText;
        #endregion
        /// 
        /// GetCrosshairAxisLabelEventArgs
        /// 
        /// ChartAxis
        /// object
        /// string List
        public GetCrosshairAxisLabelEventArgs(
            ChartAxis axis, object value, string labelText)
        {
            _ChartAxis = axis;
            _Value = value;
            _LabelText = labelText;
        }
        #region Public properties
        /// 
        /// Gets the associated ChartAxis
        /// 
        public ChartAxis ChartAxis
        {
            get { return (_ChartAxis); }
        }
        /// 
        /// Gets the associated ChartXy
        /// 
        public ChartXy ChartXy
        {
            get { return ((ChartXy)_ChartAxis.Parent); }
        }
        /// 
        /// Gets the associated label Value
        /// 
        public object Value
        {
            get { return (_Value); }
        }
        /// 
        /// Gets or sets the label Text
        /// 
        public string LabelText
        {
            get { return (_LabelText); }
            set { _LabelText = value; }
        }
        #endregion
    }
    #endregion
    #region GetCrosshairLabelHeaderEventArgs
    /// 
    /// GetCrosshairLabelHeaderEventArgs
    /// 
    public class GetCrosshairLabelHeaderEventArgs : EventArgs
    {
        #region Private variables
        private BaseChart _Chart;
        private CrosshairPoint _CrosshairPoint;
        private List _CrosshairPoints;
        private string _Text;
        #endregion
        /// 
        /// GetCrosshairLabelHeaderEventArgs
        /// 
        /// BaseChart
        /// CrosshairPoint
        /// CrosshairPoint List
        /// Default header text
        public GetCrosshairLabelHeaderEventArgs(
            BaseChart chart, CrosshairPoint cp, List cps, string text)
        {
            _Chart = chart;
            _CrosshairPoint = cp;
            _CrosshairPoints = cps;
            _Text = text;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated CrosshairPoint (for which
        /// the header text is defined for)
        /// 
        public CrosshairPoint CrosshairPoint
        {
            get { return (_CrosshairPoint); }
        }
        /// 
        /// Gets the full list of CrosshairPoints
        /// 
        public List CrosshairPoints
        {
            get { return (_CrosshairPoints); }
        }
        /// 
        /// Gets or sets the CrosshairPoint header Text
        /// 
        public string Text
        {
            get { return (_Text); }
            set { _Text = value; }
        }
        #endregion
    }
    #endregion
    #region GetCrosshairLabelItemEventArgs
    /// 
    /// GetCrosshairLabelItemEventArgs
    /// 
    public class GetCrosshairLabelItemEventArgs : EventArgs
    {
        #region Private variables
        private BaseChart _Chart;
        private CrosshairPoint _CrosshairPoint;
        private string _Text;
        #endregion
        /// 
        /// GetCrosshairLabelItemEventArgs
        /// 
        /// BaseChart
        /// CrosshairPoint
        /// Item text
        public GetCrosshairLabelItemEventArgs(
            BaseChart chart, CrosshairPoint cp, string text)
        {
            _Chart = chart;
            _CrosshairPoint = cp;
            _Text = text;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated CrosshairPoint
        /// 
        public CrosshairPoint CrosshairPoint
        {
            get { return (_CrosshairPoint); }
        }
        /// 
        /// Gets or sets the CrosshairPoint item Text
        /// 
        public string Text
        {
            get { return (_Text); }
            set { _Text = value; }
        }
        #endregion
    }
    #endregion
    #region GetPieCenterLabelEventArgs
    /// 
    /// GetPieCenterLabelEventArgs
    /// 
    public class GetPieCenterLabelEventArgs : EventArgs
    {
        #region Private variables
        private PieChart _PieChart;
        private string _LabelText;
        #endregion
        /// 
        /// GetPieCenterLabelEventArgs
        /// 
        /// 
        /// 
        public GetPieCenterLabelEventArgs(PieChart pieChart, string text)
        {
            _PieChart = pieChart;
            _LabelText = text;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets or sets the Center Label Text
        /// 
        public string LabelText
        {
            get { return (_LabelText); }
            set { _LabelText = value; }
        }
        #endregion
    }
    #endregion
    #region GetSliceLabelEventArgs
    /// 
    /// GetSliceLabelEventArgs
    /// 
    public class GetSliceLabelEventArgs : CancelEventArgs
    {
        #region Private variables
        private PieChart _Chart;
        private PieSeries _ChartSeries;
        private PieSeriesPoint _Psp;
        private bool _InnerLabel;
        private string _Text;
        #endregion
        /// 
        /// GetSliceLabelEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public GetSliceLabelEventArgs(PieChart chart,
            PieSeries chartSeries, PieSeriesPoint psp, bool inner, string text)
        {
            _Chart = chart;
            _ChartSeries = chartSeries;
            _Psp = psp;
            _InnerLabel = inner;
            _Text = text;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries
        /// 
        public PieSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated PieSeriesPoint
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (_Psp); }
        }
        /// 
        /// Gets whether the request is for the inner
        /// or outer label of the slice.
        /// 
        public bool InnerLabel
        {
            get { return (_InnerLabel); }
        }
        /// 
        /// Gets or sets the label Text
        /// 
        public string Text
        {
            get { return (_Text); }
            set { _Text = value; }
        }
        #endregion
    }
    #endregion
    #region GetTickmarkLabelEventArgs
    /// 
    /// GetTickmarkLabelEventArgs
    /// 
    public class GetTickmarkLabelEventArgs : EventArgs
    {
        #region Private variables
        private ChartAxis _ChartAxis;
        private object _Value;
        private string _LabelText;
        private Color _LabelColor = Color.Empty;
        #endregion
        /// 
        /// GetTickmarkLabelEventArgs
        /// 
        /// ChartAxis
        /// object
        /// string List
        public GetTickmarkLabelEventArgs(
            ChartAxis axis, object value, string labelText)
        {
            _ChartAxis = axis;
            _Value = value;
            _LabelText = labelText;
        }
        #region Public properties
        /// 
        /// Gets the associated ChartAxis
        /// 
        public ChartAxis ChartAxis
        {
            get { return (_ChartAxis); }
        }
        /// 
        /// Gets the associated ChartXy
        /// 
        public ChartXy ChartXy
        {
            get { return ((ChartXy)_ChartAxis.Parent); }
        }
        /// 
        /// Gets the associated label Value
        /// 
        public object Value
        {
            get { return (_Value); }
        }
        /// 
        /// Gets or sets the label Text
        /// 
        public string LabelText
        {
            get { return (_LabelText); }
            set { _LabelText = value; }
        }
        /// 
        /// Gets or sets the label Color
        /// 
        public Color LabelColor
        {
            get { return (_LabelColor); }
            set { _LabelColor = value; }
        }
        #endregion
    }
    #endregion
    #region GetToolTipEventArgs
    /// 
    /// GetToolTipEventArgs
    /// 
    public class GetToolTipEventArgs : CancelEventArgs
    {
        #region Private variables
        private BaseChart _BaseChart;
        private BaseSeries _BaseSeries;
        private SeriesPoint _SeriesPoint;
        private string _ToolTip;
        #endregion
        /// 
        /// GetToolTipEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        public GetToolTipEventArgs(BaseChart baseChart,
            BaseSeries baseSeries, SeriesPoint sp, string toolTip)
        {
            _BaseChart = baseChart;
            _BaseSeries = baseSeries;
            _SeriesPoint = sp;
            _ToolTip = toolTip;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart.
        /// 
        public BaseChart BaseChart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated BaseSeries.
        /// 
        public BaseSeries BaseSeries
        {
            get { return (_BaseSeries); }
        }
        /// 
        /// Gets the associated SeriesPoint.
        /// 
        public SeriesPoint SeriesPoint
        {
            get { return (_SeriesPoint); }
        }
        /// 
        /// Gets the associated PieChart.
        /// 
        public PieChart PieChart
        {
            get { return (_BaseChart as PieChart); }
        }
        /// 
        /// Gets the associated PieSeries.
        /// 
        public PieSeries PieSeries
        {
            get { return (_BaseSeries as PieSeries); }
        }
        /// 
        /// Gets the associated PieSeriesPoint.
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (_SeriesPoint as PieSeriesPoint); }
        }
        /// 
        /// Gets or sets the associated ToolTip text
        /// 
        public string ToolTip
        {
            get { return (_ToolTip); }
            set { _ToolTip = value; }
        }
        #endregion
    }
    #endregion
    #region LegendItemCheckedChangedEventArgs
    /// 
    /// LegendItemCheckedChangedEventArgs
    /// 
    public class LegendItemCheckedChangedEventArgs : EventArgs
    {
        #region Private variables
        private ChartLegend _Legend;
        private ChartLegendItem _LegendItem;
        #endregion
        ///
        /// LegendItemCheckedChangedEventArgs
        ///
        ///Associated legend
        ///Associated legend item
        public LegendItemCheckedChangedEventArgs(
            ChartLegend legend, ChartLegendItem legendItem)
        {
            _Legend = legend;
            _LegendItem = legendItem;
        }
        #region Public properties
        /// 
        /// Gets the associated Legend.
        /// 
        public ChartLegend Legend
        {
            get { return (_Legend); }
        }
        /// 
        /// Gets the associated LegendItem.
        /// 
        public ChartLegendItem LegendItem
        {
            get { return (_LegendItem); }
        }
        #endregion
    }
    #endregion
    #region PieCenterMarkupLinkClickEventArgs
    /// 
    /// PieCenterMarkupLinkClickEventArgs
    /// 
    public class PieCenterMarkupLinkClickEventArgs : EventArgs
    {
        #region Private variables
        private PieChart _PieChart;
        private string _HRef;
        private string _Name;
        #endregion
        ///
        /// PieCenterMarkupLinkClickEventArgs
        ///
        ///
        ///
        ///
        public PieCenterMarkupLinkClickEventArgs(PieChart pieChart, string name, string href)
        {
            _HRef = href;
            _Name = name;
            _PieChart = pieChart;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated HyperLink HRef
        /// 
        public string HRef
        {
            get { return (_HRef); }
        }
        /// 
        /// Gets the associated HyperLink Name
        /// 
        public string Name
        {
            get { return (_Name); }
        }
        #endregion
    }
    #endregion
    #region PieDetachChangedEventArgs
    /// 
    /// PieDetachChangedEventArgs
    /// 
    public class PieDetachChangedEventArgs : EventArgs
    {
        #region Private variables
        private PieChart _PieChart;
        private PieSeries _PieSeries;
        private PieSelectionMode _PieSelectionMode;
        #endregion
        /// 
        /// PieDetachChangedEventArgs
        /// 
        /// 
        /// 
        /// 
        public PieDetachChangedEventArgs(
            PieChart pieChart, PieSeries pieSeries, PieSelectionMode psm)
        {
            _PieChart = pieChart;
            _PieSeries = pieSeries;
            _PieSelectionMode = psm;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated PieSeries.
        /// 
        public PieSeries PieSeries
        {
            get { return (_PieSeries); }
        }
        /// 
        /// Gets the associated PieSelectionMode.
        /// 
        public PieSelectionMode PieSelectionMode
        {
            get { return (_PieSelectionMode); }
        }
        #endregion
    }
    #endregion
    #region PieExplodeChangedEventArgs
    /// 
    /// PieExplodeChangedEventArgs
    /// 
    public class PieExplodeChangedEventArgs : EventArgs
    {
        #region Private variables
        private PieChart _PieChart;
        private PieSeries _PieSeries;
        #endregion
        /// 
        /// PieExplodeChangedEventArgs
        /// 
        /// 
        /// 
        public PieExplodeChangedEventArgs(PieChart pieChart, PieSeries pieSeries)
        {
            _PieChart = pieChart;
            _PieSeries = pieSeries;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated PieSeries.
        /// 
        public PieSeries PieSeries
        {
            get { return (_PieSeries); }
        }
        #endregion
    }
    #endregion
    #region PieRingLevelChangingEventArgs
    /// 
    /// PieRingLevelChangedEventArgs
    /// 
    public class PieRingLevelChangedEventArgs : EventArgs
    {
        #region Private variables
        private PieChart _PieChart;
        private PieSeriesPointCollection _SpcOld;
        private PieSeriesPointCollection _SpcNew;
        #endregion
        /// 
        /// PieRingLevelChanged
        /// 
        /// 
        /// 
        /// 
        public PieRingLevelChangedEventArgs(
            PieChart pieChart, PieSeriesPointCollection spcOld, PieSeriesPointCollection spcNew)
        {
            _PieChart = pieChart;
            _SpcOld = spcOld;
            _SpcNew = spcNew;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the old, post-change PieSeriesPointCollection.
        /// 
        public PieSeriesPointCollection SpcOld
        {
            get { return (_SpcOld); }
        }
        /// 
        /// Gets the new, post-change PieSeriesPointCollection.
        /// 
        public PieSeriesPointCollection SpcNew
        {
            get { return (_SpcNew); }
        }
        #endregion
    }
    #endregion
    #region PieRingLevelChangingEventArgs
    /// 
    /// PieRingLevelChanging
    /// 
    public class PieRingLevelChangingEventArgs : CancelEventArgs
    {
        #region Private variables
        private PieChart _PieChart;
        private PieSeriesPointCollection _SpcOld;
        private PieSeriesPointCollection _SpcNew;
        #endregion
        /// 
        /// PieRingLevelChangingEventArgs
        /// 
        /// 
        /// 
        /// 
        public PieRingLevelChangingEventArgs(
            PieChart pieChart, PieSeriesPointCollection spcOld, PieSeriesPointCollection spcNew)
        {
            _PieChart = pieChart;
            _SpcOld = spcOld;
            _SpcNew = spcNew;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the old, pre-change PieSeriesPointCollection.
        /// 
        public PieSeriesPointCollection SpcOld
        {
            get { return (_SpcOld); }
        }
        /// 
        /// Gets the new, pre-change PieSeriesPointCollection.
        /// 
        public PieSeriesPointCollection SpcNew
        {
            get { return (_SpcNew); }
        }
        #endregion
    }
    #endregion
    #region PieSelectionChangedEventArgs
    /// 
    /// PieSelectionChangedEventArgs
    /// 
    public class PieSelectionChangedEventArgs : EventArgs
    {
        #region Private variables
        private PieChart _PieChart;
        private PieSeries _PieSeries;
        private PieSeriesPoint _PieSeriesPoint;
        private PieSelectionMode _PieSelectionMode;
        #endregion
        /// 
        /// PieSelectionChangedEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        public PieSelectionChangedEventArgs(
            PieChart pieChart, PieSeries pieSeries, PieSeriesPoint psp, PieSelectionMode psm)
        {
            _PieChart = pieChart;
            _PieSeries = pieSeries;
            _PieSeriesPoint = psp;
            _PieSelectionMode = psm;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated PieSeries.
        /// 
        public PieSeries PieSeries
        {
            get { return (_PieSeries); }
        }
        /// 
        /// Gets the associated PieSeriesPoint (may not be
        /// applicable for the associated PieSelectionMode).
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (_PieSeriesPoint); }
        }
        /// 
        /// Gets the associated PieSelectionMode.
        /// 
        public PieSelectionMode PieSelectionMode
        {
            get { return (_PieSelectionMode); }
        }
        #endregion
    }
    #endregion
    #region PostLoadLegendDataEventArgs
    /// 
    /// PostLoadLegendDataEventArgs
    /// 
    public class PostLoadLegendDataEventArgs : EventArgs
    {
        #region Private variables
        private ChartLegend _Legend;
        private ChartContainer _ChartContainer;
        #endregion
        public PostLoadLegendDataEventArgs(ChartLegend legend)
        {
            _Legend = legend;
            _ChartContainer = legend.ParentChartContainer;
        }
        #region Public properties
        /// 
        /// Gets the associated Legend
        /// 
        public ChartLegend Legend
        {
            get { return (_Legend); }
        }
        /// 
        /// Gets the Legend's parent ChartContainer
        /// 
        public ChartContainer ChartContainer
        {
            get { return (_ChartContainer); }
        }
        #endregion
    }
    #endregion
    #region PostRenderContentBackgroundEventArgs
    /// 
    /// PostRenderContentBackgroundEventArgs
    /// 
    public class PostRenderContentBackgroundEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _BaseChart;
        private Rectangle _Bounds;
        #endregion
        /// 
        /// PostRenderContentBackgroundEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Bounds
        public PostRenderContentBackgroundEventArgs(Graphics g, BaseChart baseChart, Rectangle bounds)
        {
            _Graphics = g;
            _BaseChart = baseChart;
            _Bounds = bounds;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart BaseChart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated ChartXy
        /// 
        public ChartXy ChartXy
        {
            get { return (_BaseChart as ChartXy); }
        }
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_BaseChart as PieChart); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated bounding rectangle
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        #endregion
    }
    #endregion
    #region PostRenderFrameBackgroundEventArgs
    /// 
    /// PostRenderFrameBackgroundEventArgs
    /// 
    public class PostRenderFrameBackgroundEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _BaseChart;
        private Rectangle _Bounds;
        #endregion
        /// 
        /// PostRenderFrameBackgroundEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Bounds
        public PostRenderFrameBackgroundEventArgs(Graphics g, BaseChart baseChart, Rectangle bounds)
        {
            _Graphics = g;
            _BaseChart = baseChart;
            _Bounds = bounds;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart BaseChart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated ChartXy
        /// 
        public ChartXy ChartXy
        {
            get { return (_BaseChart as ChartXy); }
        }
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_BaseChart as PieChart); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated bounding rectangle
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        #endregion
    }
    #endregion
    #region PostRenderPanelBackgroundEventArgs
    /// 
    /// PostRenderPanelBackgroundEventArgs
    /// 
    public class PostRenderPanelBackgroundEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private ChartPanel _ChartPanel;
        private Rectangle _Bounds;
        #endregion
        /// 
        /// PostRenderPanelBackgroundEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Bounds
        public PostRenderPanelBackgroundEventArgs(Graphics g, ChartPanel panel, Rectangle bounds)
        {
            _Graphics = g;
            _ChartPanel = panel;
            _Bounds = bounds;
        }
        #region Public properties
        /// 
        /// Gets the associated ChartPanel
        /// 
        public ChartPanel ChartPanel
        {
            get { return (_ChartPanel); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated bounding rectangle
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        #endregion
    }
    #endregion
    #region PostRenderSeriesBarEventArgs
    /// 
    /// PostRenderSeriesBarEventArgs
    /// 
    public class PostRenderSeriesBarEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private SeriesPoint _SeriesPoint;
        private Rectangle _Bounds;
        private Rectangle _ExtendedBounds;
        private BarSegment _BarSegment;
        #endregion
        /// 
        /// PostRenderSeriesBarEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Chart Series
        /// SeriesPoint
        public PostRenderSeriesBarEventArgs(Graphics graphics, BaseChart chart,
            ChartSeries series, SeriesPoint sp, Rectangle r, Rectangle r2, BarSegment segment)
        {
            _Graphics = graphics;
            _Chart = chart;
            _ChartSeries = series;
            _SeriesPoint = sp;
            _Bounds = r;
            _ExtendedBounds = r2;
            _BarSegment = segment;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the bounds for the bar segment.
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        /// 
        /// Gets the associated SeriesPoint
        /// 
        public SeriesPoint SeriesPoint
        {
            get { return (_SeriesPoint); }
        }
        /// 
        /// Gets the 'extended' rectangle for the bar (calculated based
        /// upon the series maximum displayed bar bounds).
        /// 
        public Rectangle ExtendedBounds
        {
            get { return (_ExtendedBounds); }
        }
        /// 
        /// Gets the associated 'segment' of the bar being rendered.
        /// 
        public BarSegment BarSegment
        {
            get { return (_BarSegment); }
        }
        #endregion
    }
    #endregion
    #region PostRenderSeriesHiLoBarEventArgs
    /// 
    /// PreRenderSeriesHiLoBarEventArgs
    /// 
    public class PostRenderSeriesHiLoBarEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private HiLoRenderData _RenderData;
        private HiLoBarSegment _BarSegment;
        private Point _Pt1;
        private Point _Pt2;
        #endregion
        /// 
        /// PostRenderSeriesHiLoBarEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public PostRenderSeriesHiLoBarEventArgs(Graphics g, BaseChart chart,
            ChartSeries series, HiLoRenderData rd, Point pt1, Point pt2, HiLoBarSegment segment)
        {
            _Graphics = g;
            _Chart = chart;
            _ChartSeries = series;
            _RenderData = rd;
            _BarSegment = segment;
            _Pt1 = pt1;
            _Pt2 = pt2;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated HiLo RenderData.
        /// 
        public HiLoRenderData RenderData
        {
            get { return (_RenderData); }
        }
        /// 
        /// Gets the associated HiLo BarSegment.
        /// 
        public HiLoBarSegment BarSegment
        {
            get { return (_BarSegment); }
        }
        /// 
        /// Gets the initial segment Point.
        /// 
        public Point Point1
        {
            get { return (_Pt1); }
        }
        /// 
        /// Gets the terminal segment Point.
        /// 
        public Point Point2
        {
            get { return (_Pt2); }
        }
        #endregion
    }
    #endregion
    #region PostRenderSliceEventArgs
    /// 
    /// PostRenderSliceEventArgs
    /// 
    public class PostRenderSliceEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private GraphicsPath _GraphicsPath;
        private PieChart _PieChart;
        private PieSeries _PieSeries;
        private PieSeriesPoint _PieSeriesPoint;
        private SliceRenderType _SliceRenderType;
        #endregion
        /// 
        /// PostRenderSliceEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public PostRenderSliceEventArgs(Graphics g, GraphicsPath path,
            PieChart pieChart, PieSeries pieSeries, PieSeriesPoint psp, SliceRenderType rtype)
        {
            _Graphics = g;
            _GraphicsPath = path;
            _PieChart = pieChart;
            _PieSeries = pieSeries;
            _PieSeriesPoint = psp;
            _SliceRenderType = rtype;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated PieSeries
        /// 
        public PieSeries PieSeries
        {
            get { return (_PieSeries); }
        }
        /// 
        /// Gets the associated PieSeriesPoint
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (PieSeriesPoint); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the GraphicsPath for the slice.
        /// 
        public GraphicsPath GraphicsPath
        {
            get { return (_GraphicsPath); }
        }
        /// 
        /// Gets the SliceRenderType - they 'type' of slice element being rendered.
        /// 
        public SliceRenderType SliceRenderType
        {
            get { return (_SliceRenderType); }
        }
        #endregion
    }
    #endregion
    #region PostRenderPieCenterBackgroundEventArgs
    /// 
    /// PostRenderPieCenterBackgroundEventArgs
    /// 
    public class PostRenderPieCenterBackgroundEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private Rectangle _CenterBounds;
        #endregion
        /// 
        /// PostRenderPieCenterBackgroundEventArgs
        /// 
        /// 
        /// 
        /// 
        public PostRenderPieCenterBackgroundEventArgs(
            Graphics g, PieChart pieChart, Rectangle rc)
        {
            _Graphics = g;
            _PieChart = pieChart;
            _CenterBounds = rc;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the Pie Center Bounds.
        /// 
        public Rectangle CenterBounds
        {
            get { return (_CenterBounds); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region PostRenderPieCenterContentEventArgs
    /// 
    /// PostRenderPieCenterContentEventArgs
    /// 
    public class PostRenderPieCenterContentEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private Rectangle _TextBounds;
        private string _CenterLabel;
        #endregion
        /// 
        /// PostRenderPieCenterContentEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        public PostRenderPieCenterContentEventArgs(
            Graphics g, PieChart pieChart, Rectangle rt, string centerlabel)
        {
            _Graphics = g;
            _PieChart = pieChart;
            _TextBounds = rt;
            _CenterLabel = centerlabel;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the Pie Center Text Bounds.
        /// 
        public Rectangle TextBounds
        {
            get { return (_TextBounds); }
        }
        /// 
        /// Gets the center text label.
        /// 
        public string CenterLabel
        {
            get { return (_CenterLabel); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region PostRenderPointConnectorEventArgs
    /// 
    /// PostRenderPointConnectorEventArgs
    /// 
    public class PostRenderPointConnectorEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private PointLabel _PointLabel;
        private bool _IsCrosshairPoint;
        private Point _DataPoint;
        private Point _LabelPoint;
        #endregion
        /// 
        /// PostRenderPointConnectorEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Chart Series
        /// PointLabel
        /// Is the point a crosshair point
        /// Data Point
        /// Label Point
        public PostRenderPointConnectorEventArgs(Graphics graphics, BaseChart chart,
            ChartSeries series, PointLabel pointLabel, bool isCrosshairPt, Point dataPt, Point labelPt)
        {
            _Graphics = graphics;
            _Chart = chart;
            _ChartSeries = series;
            _PointLabel = pointLabel;
            _IsCrosshairPoint = isCrosshairPt;
            _DataPoint = dataPt;
            _LabelPoint = labelPt;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart.
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries.
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object.
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated PointLabel.
        /// 
        public PointLabel PointLabel
        {
            get { return (_PointLabel); }
        }
        /// 
        /// Gets the whether the point is a Crosshair Point.
        /// 
        public bool IsCrosshairPoint
        {
            get { return (_IsCrosshairPoint); }
        }
        /// 
        /// Gets the data-side Connector Point.
        /// 
        public Point DataPoint
        {
            get { return (_DataPoint); }
        }
        /// 
        /// Gets the label-side Connector Point.
        /// 
        public Point LabelPoint
        {
            get { return (_LabelPoint); }
        }
        #endregion
    }
    #endregion
    #region PostRenderPointLabelEventArgs
    /// 
    /// PostRenderPointLabelEventArgs
    /// 
    public class PostRenderPointLabelEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private PointLabel _PointLabel;
        private bool _IsCrosshairPoint;
        private Rectangle _Bounds;
        #endregion
        /// 
        /// PostRenderPointLabelEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Chart Series
        /// PointLabel
        /// Is the point a crosshair point
        /// Display Bounds
        public PostRenderPointLabelEventArgs(Graphics graphics, BaseChart chart,
           ChartSeries series, PointLabel pointLabel, bool isCrosshairPoint, Rectangle bounds)
        {
            _Graphics = graphics;
            _Chart = chart;
            _ChartSeries = series;
            _PointLabel = pointLabel;
            _IsCrosshairPoint = isCrosshairPoint;
            _Bounds = bounds;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart.
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries.
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object.
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated PointLabel.
        /// 
        public PointLabel PointLabel
        {
            get { return (_PointLabel); }
        }
        /// 
        /// Gets the whether the point is a Crosshair Point.
        /// 
        public bool IsCrosshairPoint
        {
            get { return (_IsCrosshairPoint); }
        }
        /// 
        /// Gets the bounding display rectangle.
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        #endregion
    }
    #endregion
    #region PostRenderRadialGridEventArgs
    /// 
    /// PostRenderRadialGridEventArgs
    /// 
    public class PostRenderRadialGridEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private double _OuterRadius;
        private double _InnerRadius;
        private double _ExpDelta;
        #endregion
        /// 
        /// PostRenderRadialGridEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public PostRenderRadialGridEventArgs(Graphics graphics,
            PieChart pieChart, double outerRadius, double innerRadius, double exp)
        {
            _Graphics = graphics;
            _PieChart = pieChart;
            _OuterRadius = outerRadius;
            _InnerRadius = innerRadius;
            _ExpDelta = exp;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart.
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the inner, bounding radius for the grid.
        /// 
        public double InnerRadius
        {
            get { return (_InnerRadius); }
        }
        /// 
        /// Gets the outer, bounding radius for the grid.
        /// 
        public double OuterRadius
        {
            get { return (_OuterRadius); }
        }
        /// 
        /// Gets the expanded/exploded delta for the grid.  This is
        /// the adjustment needed if the pie has been expanded. If you
        /// want to render an expanded grid, then this delta should be
        /// added to both the inner and outer radius values.
        /// 
        public double ExpDelta
        {
            get { return (_ExpDelta); }
        }
        /// 
        /// Gets the associated Graphics object.
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region PostRenderSeriesPointEventArgs
    /// 
    /// PostRenderSeriesPointEventArgs
    /// 
    public class PostRenderSeriesPointEventArgs : EventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private Point _Point;
        private SeriesPoint _SeriesPoint;
        private Size _PointSize;
        private Image _Marker;
        #endregion
        /// 
        /// PostRenderSeriesPointEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Chart Series
        /// Marker Point (center)
        /// SeriesPoint
        /// Max marker point size
        /// Marker Image
        public PostRenderSeriesPointEventArgs(Graphics graphics,
            BaseChart chart, ChartSeries series, SeriesPoint sp, Point pt, Size pointSize, Image marker)
        {
            _Graphics = graphics;
            _Chart = chart;
            _ChartSeries = series;
            _Point = pt;
            _SeriesPoint = sp;
            _PointSize = pointSize;
            _Marker = marker;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the center point for the marker
        /// 
        public Point Point
        {
            get { return (_Point); }
        }
        /// 
        /// Gets the associated SeriesPoint
        /// 
        public SeriesPoint SeriesPoint
        {
            get { return (_SeriesPoint); }
        }
        /// 
        /// Gets the max size for the point marker
        /// 
        public Size PointSize
        {
            get { return (_PointSize); }
        }
        /// 
        /// Gets the associated marker Image
        /// 
        public Image Marker
        {
            get { return (_Marker); }
        }
        #endregion
    }
    #endregion
    #region PreLoadLegendDataEventArgs
    /// 
    /// PreLoadLegendDataEventArgs
    /// 
    public class PreLoadLegendDataEventArgs : CancelEventArgs
    {
        #region Private variables
        private ChartLegend _Legend;
        private ChartContainer _ChartContainer;
        #endregion
        public PreLoadLegendDataEventArgs(ChartLegend legend)
        {
            _Legend = legend;
            _ChartContainer = legend.ParentChartContainer;
        }
        #region Public properties
        /// 
        /// Gets the associated Legend
        /// 
        public ChartLegend Legend
        {
            get { return (_Legend); }
        }
        /// 
        /// Gets the Legend's parent ChartContainer
        /// 
        public ChartContainer ChartContainer
        {
            get { return (_ChartContainer); }
        }
        #endregion
    }
    #endregion
    #region PreRenderContentBackgroundEventArgs
    /// 
    /// PreRenderContentBackgroundEventArgs
    /// 
    public class PreRenderContentBackgroundEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _BaseChart;
        private Rectangle _Bounds;
        #endregion
        /// 
        /// PreRenderContentBackgroundEventArgs
        /// 
        /// 
        /// 
        /// 
        public PreRenderContentBackgroundEventArgs(Graphics g, BaseChart baseChart, Rectangle r)
        {
            _Graphics = g;
            _BaseChart = baseChart;
            _Bounds = r;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart BaseChart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated ChartXy
        /// 
        public ChartXy ChartXy
        {
            get { return (_BaseChart as ChartXy); }
        }
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_BaseChart as PieChart); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the bounds for the bar segment.
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        #endregion
    }
    #endregion
    #region PreRenderFrameBackgroundEventArgs
    /// 
    /// PreRenderFrameBackgroundEventArgs
    /// 
    public class PreRenderFrameBackgroundEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _BaseChart;
        private Rectangle _Bounds;
        #endregion
        /// 
        /// PreRenderFrameBackgroundEventArgs
        /// 
        /// 
        /// 
        /// 
        public PreRenderFrameBackgroundEventArgs(Graphics g, BaseChart baseChart, Rectangle r)
        {
            _Graphics = g;
            _BaseChart = baseChart;
            _Bounds = r;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart BaseChart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated ChartXy
        /// 
        public ChartXy ChartXy
        {
            get { return (_BaseChart as ChartXy); }
        }
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_BaseChart as PieChart); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the bounds for the bar segment.
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        #endregion
    }
    #endregion
    #region PreRenderPanelBackgroundEventArgs
    /// 
    /// PreRenderPanelBackgroundEventArgs
    /// 
    public class PreRenderPanelBackgroundEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private ChartPanel _ChartPanel;
        private Rectangle _Bounds;
        #endregion
        /// 
        /// PreRenderPanelBackgroundEventArgs
        /// 
        /// 
        /// 
        /// 
        public PreRenderPanelBackgroundEventArgs(Graphics g, ChartPanel panel, Rectangle r)
        {
            _Graphics = g;
            _ChartPanel = panel;
            _Bounds = r;
        }
        #region Public properties
        /// 
        /// Gets the associated ChartPanel
        /// 
        public ChartPanel ChartPanel
        {
            get { return (_ChartPanel); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the bounds for the bar segment.
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        #endregion
    }
    #endregion
    #region PreRenderPieCenterBackgroundEventArgs
    /// 
    /// PreRenderPieCenterBackgroundEventArgs
    /// 
    public class PreRenderPieCenterBackgroundEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private Rectangle _CenterBounds;
        #endregion
        /// 
        /// PreRenderPieCenterBackgroundEventArgs
        /// 
        /// 
        /// 
        /// 
        public PreRenderPieCenterBackgroundEventArgs(
            Graphics g, PieChart pieChart, Rectangle rc)
        {
            _Graphics = g;
            _PieChart = pieChart;
            _CenterBounds = rc;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the Pie Center Bounds.
        /// 
        public Rectangle CenterBounds
        {
            get { return (_CenterBounds); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region PreRenderPieCenterContentEventArgs
    /// 
    /// PreRenderPieCenterContentEventArgs
    /// 
    public class PreRenderPieCenterContentEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private Rectangle _TextBounds;
        private string _CenterLabel;
        #endregion
        /// 
        /// PreRenderPieCenterContentEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        public PreRenderPieCenterContentEventArgs(
            Graphics g, PieChart pieChart, Rectangle rt, string centerlabel)
        {
            _Graphics = g;
            _PieChart = pieChart;
            _TextBounds = rt;
            _CenterLabel = centerlabel;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the Pie Center Text Bounds.
        /// 
        public Rectangle TextBounds
        {
            get { return (_TextBounds); }
        }
        /// 
        /// Gets the center text label.
        /// 
        public string CenterLabel
        {
            get { return (_CenterLabel); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region PreRenderPointConnectorEventArgs
    /// 
    /// PreRenderPointConnectorEventArgs
    /// 
    public class PreRenderPointConnectorEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private PointLabel _PointLabel;
        private bool _IsCrosshairPoint;
        private Point _DataPoint;
        private Point _LabelPoint;
        #endregion
        /// 
        /// PreRenderPointConnectorEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Chart Series
        /// PointLabel
        /// Is the point a crosshair point
        /// Data Point
        /// Label Point
        public PreRenderPointConnectorEventArgs(Graphics graphics, BaseChart chart,
            ChartSeries series, PointLabel pointLabel, bool isCrosshairPt, Point dataPt, Point labelPt)
        {
            _Graphics = graphics;
            _Chart = chart;
            _ChartSeries = series;
            _PointLabel = pointLabel;
            _IsCrosshairPoint = isCrosshairPt;
            _DataPoint = dataPt;
            _LabelPoint = labelPt;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart.
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries.
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object.
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated PointLabel.
        /// 
        public PointLabel PointLabel
        {
            get { return (_PointLabel); }
        }
        /// 
        /// Gets the whether the point is a Crosshair Point.
        /// 
        public bool IsCrosshairPoint
        {
            get { return (_IsCrosshairPoint); }
        }
        /// 
        /// Gets the data-side Connector Point.
        /// 
        public Point DataPoint
        {
            get { return (_DataPoint); }
        }
        /// 
        /// Gets the label-side Connector Point.
        /// 
        public Point LabelPoint
        {
            get { return (_LabelPoint); }
        }
        #endregion
    }
    #endregion
    #region PreRenderPointLabelEventArgs
    /// 
    /// PreRenderPointLabelEventArgs
    /// 
    public class PreRenderPointLabelEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private PointLabel _PointLabel;
        private bool _IsCrosshairPoint;
        private Rectangle _Bounds;
        #endregion
        /// 
        /// PreRenderPointLabelEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Chart Series
        /// PointLabel
        /// Is the point a crosshair point
        /// Display Bounds
        public PreRenderPointLabelEventArgs(Graphics graphics, BaseChart chart,
           ChartSeries series, PointLabel pointLabel, bool isCrosshairPoint, Rectangle bounds)
        {
            _Graphics = graphics;
            _Chart = chart;
            _ChartSeries = series;
            _PointLabel = pointLabel;
            _IsCrosshairPoint = isCrosshairPoint;
            _Bounds = bounds;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart.
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries.
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object.
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated PointLabel.
        /// 
        public PointLabel PointLabel
        {
            get { return (_PointLabel); }
        }
        /// 
        /// Gets the whether the point is a Crosshair Point.
        /// 
        public bool IsCrosshairPoint
        {
            get { return (_IsCrosshairPoint); }
        }
        /// 
        /// Gets the bounding display rectangle.
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        #endregion
    }
    #endregion
    #region PreRenderRadialGridEventArgs
    /// 
    /// PreRenderRadialGridEventArgs
    /// 
    public class PreRenderRadialGridEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private double _OuterRadius;
        private double _InnerRadius;
        private double _ExpDelta;
        #endregion
        /// 
        /// PreRenderRadialGridEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public PreRenderRadialGridEventArgs(Graphics graphics,
            PieChart pieChart, double outerRadius, double innerRadius, double exp)
        {
            _Graphics = graphics;
            _PieChart = pieChart;
            _OuterRadius = outerRadius;
            _InnerRadius = innerRadius;
            _ExpDelta = exp;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart.
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the inner, bounding radius for the grid.
        /// 
        public double InnerRadius
        {
            get { return (_InnerRadius); }
        }
        /// 
        /// Gets the outer, bounding radius for the grid.
        /// 
        public double OuterRadius
        {
            get { return (_OuterRadius); }
        }
        /// 
        /// Gets the expanded/exploded delta for the grid.  This is
        /// the adjustment needed if the pie has been expanded. If you
        /// want to render an expanded grid, then this delta should be
        /// added to both the inner and outer radius values.
        /// 
        public double ExpDelta
        {
            get { return (_ExpDelta); }
        }
        /// 
        /// Gets the associated Graphics object.
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region PreRenderSeriesBarEventArgs
    /// 
    /// PreRenderSeriesBarEventArgs
    /// 
    public class PreRenderSeriesBarEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private SeriesPoint _SeriesPoint;
        private Rectangle _Bounds;
        private Rectangle _FillRangeBounds;
        private BarSegment _BarSegment;
        #endregion
        /// 
        /// PreRenderSeriesBarEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public PreRenderSeriesBarEventArgs(Graphics graphics, BaseChart chart,
            ChartSeries series, SeriesPoint sp, Rectangle r, Rectangle r2, BarSegment segment)
        {
            _Graphics = graphics;
            _Chart = chart;
            _ChartSeries = series;
            _SeriesPoint = sp;
            _Bounds = r;
            _FillRangeBounds = r2;
            _BarSegment = segment;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the bounds for the bar segment.
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        /// 
        /// Gets the 'FillRange' bounds for the bar (See ChartXy.FillRange).
        /// 
        public Rectangle FillRangeBounds
        {
            get { return (_FillRangeBounds); }
        }
        /// 
        /// Gets the associated SeriesPoint
        /// 
        public SeriesPoint SeriesPoint
        {
            get { return (_SeriesPoint); }
        }
        /// 
        /// Gets the associated 'segment' of the bar being rendered.
        /// 
        public BarSegment BarSegment
        {
            get { return (_BarSegment); }
        }
        #endregion
    }
    #endregion
    #region PreRenderSeriesHiLoBarEventArgs
    /// 
    /// PreRenderSeriesHiLoBarEventArgs
    /// 
    public class PreRenderSeriesHiLoBarEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private HiLoRenderData _RenderData;
        private HiLoBarSegment _BarSegment;
        private Point _Pt1;
        private Point _Pt2;
        #endregion
        /// 
        /// PreRenderSeriesHiLoBarEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public PreRenderSeriesHiLoBarEventArgs(Graphics g, BaseChart chart,
            ChartSeries series, HiLoRenderData rd, Point pt1, Point pt2, HiLoBarSegment segment)
        {
            _Graphics = g;
            _Chart = chart;
            _ChartSeries = series;
            _RenderData = rd;
            _BarSegment = segment;
            _Pt1 = pt1;
            _Pt2 = pt2;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the associated HiLo RenderData.
        /// 
        public HiLoRenderData RenderData
        {
            get { return (_RenderData); }
        }
        /// 
        /// Gets the associated HiLo BarSegment.
        /// 
        public HiLoBarSegment BarSegment
        {
            get { return (_BarSegment); }
        }
        /// 
        /// Gets the initial segment Point.
        /// 
        public Point Point1
        {
            get { return (_Pt1); }
        }
        /// 
        /// Gets the terminal segment Point.
        /// 
        public Point Point2
        {
            get { return (_Pt2); }
        }
        /// 
        /// Gets the associated SeriesPoint
        /// 
        public SeriesPoint SeriesPoint
        {
            get { return (_RenderData.Sp); }
        }
        /// 
        /// Gets the associated SeriesPoint index
        /// 
        public int SeriesPointIndex
        {
            get { return (_RenderData.Index); }
        }
        #endregion
    }
    #endregion
    #region PreRenderSeriesPointEventArgs
    /// 
    /// PreRenderSeriesPointEventArgs
    /// 
    public class PreRenderSeriesPointEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private ChartSeries _ChartSeries;
        private Point _Point;
        private SeriesPoint _SeriesPoint;
        private Size _PointSize;
        private Image _Marker;
        #endregion
        /// 
        /// PreRenderSeriesPointEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Chart Series
        /// Marker Point (center)
        /// SeriesPoint
        /// Max marker point size
        /// Marker Image
        public PreRenderSeriesPointEventArgs(Graphics graphics,
            BaseChart chart, ChartSeries series, SeriesPoint sp, Point pt, Size pointSize, Image marker)
        {
            _Graphics = graphics;
            _Chart = chart;
            _ChartSeries = series;
            _Point = pt;
            _SeriesPoint = sp;
            _PointSize = pointSize;
            _Marker = marker;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated ChartSeries
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_ChartSeries); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the center point for the marker
        /// 
        public Point Point
        {
            get { return (_Point); }
        }
        /// 
        /// Gets the associated SeriesPoint
        /// 
        public SeriesPoint SeriesPoint
        {
            get { return (_SeriesPoint); }
        }
        /// 
        /// Gets the max size for the point marker
        /// 
        public Size PointSize
        {
            get { return (_PointSize); }
        }
        /// 
        /// Gets or sets the associated marker Image
        /// 
        public Image Marker
        {
            get { return (_Marker); }
            set { _Marker = value; }
        }
        #endregion
    }
    #endregion
    #region PreRenderSliceEventArgs
    /// 
    /// PreRenderSliceEventArgs
    /// 
    public class PreRenderSliceEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private GraphicsPath _GraphicsPath;
        private PieChart _PieChart;
        private PieSeries _PieSeries;
        private PieSeriesPoint _PieSeriesPoint;
        private SliceRenderType _SliceRenderType;
        #endregion
        /// 
        /// PreRenderSliceEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public PreRenderSliceEventArgs(Graphics g, GraphicsPath path,
            PieChart pieChart, PieSeries pieSeries, PieSeriesPoint psp, SliceRenderType rtype)
        {
            _Graphics = g;
            _GraphicsPath = path;
            _PieChart = pieChart;
            _PieSeries = pieSeries;
            _PieSeriesPoint = psp;
            _SliceRenderType = rtype;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated PieSeries
        /// 
        public PieSeries PieSeries
        {
            get { return (_PieSeries); }
        }
        /// 
        /// Gets the associated PieSeriesPoint
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (PieSeriesPoint); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the GraphicsPath for the slice.
        /// 
        public GraphicsPath GraphicsPath
        {
            get { return (_GraphicsPath); }
        }
        /// 
        /// Gets the SliceRenderType - they 'type' of slice element being rendered.
        /// 
        public SliceRenderType SliceRenderType
        {
            get { return (_SliceRenderType); }
        }
        #endregion
    }
    #endregion
    #region ReferenceLineMarkupLinkClickEventArgs
    /// 
    /// ReferenceLineMarkupLinkClickEventArgs
    /// 
    public class ReferenceLineMarkupLinkClickEventArgs : EventArgs
    {
        #region Private variables
        private string _HRef;
        private string _Name;
        private ReferenceLine _ReferenceLine;
        #endregion
        /// 
        /// ReferenceLineMarkupLinkClickEventArgs
        /// 
        /// 
        /// 
        /// 
        public ReferenceLineMarkupLinkClickEventArgs(
            ReferenceLine referenceLine, string name, string href)
        {
            _HRef = href;
            _Name = name;
            _ReferenceLine = referenceLine;
        }
        #region Public properties
        /// 
        /// Gets the associated HyperLink HRef
        /// 
        public string HRef
        {
            get { return (_HRef); }
        }
        /// 
        /// Gets the associated HyperLink Name
        /// 
        public string Name
        {
            get { return (_Name); }
        }
        /// 
        /// Gets the associated ReferenceLine
        /// 
        public ReferenceLine ReferenceLine
        {
            get { return (_ReferenceLine); }
        }
        #endregion
    }
    #endregion
    #region RenderCrosshairCalloutEventArgs
    /// 
    /// RenderCrosshairCalloutEventArgs
    /// 
    public class RenderCrosshairCalloutEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private Rectangle _Bounds;
        private Point _Point;
        private CrosshairVisualStyle _Style;
        #endregion
        /// 
        /// RenderCrosshairCalloutEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// Callout bounds
        /// Mouse point
        /// Crosshair style
        public RenderCrosshairCalloutEventArgs(Graphics graphics,
            BaseChart chart, Rectangle bounds, Point pt, CrosshairVisualStyle style)
        {
            _Graphics = graphics;
            _Chart = chart;
            _Bounds = bounds;
            _Point = pt;
            _Style = style;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the Crosshair style
        /// 
        public CrosshairVisualStyle Style
        {
            get { return (_Style); }
        }
        /// 
        /// Gets the bounding chart Rectangle
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        /// 
        /// Gets the associated mouse position
        /// 
        public Point Point
        {
            get { return (_Point); }
        }
        #endregion
    }
    #endregion
    #region RenderCrosshairLabelEventArgs
    /// 
    /// RenderCrosshairLabelEventArgs
    /// 
    public class RenderCrosshairLabelEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private Rectangle _Bounds;
        private List _CrosshairPoints;
        private Point _Point;
        #endregion
        /// 
        /// RenderCrosshairLabelEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// CrosshairPoint list
        /// 
        /// Mouse Point
        public RenderCrosshairLabelEventArgs(Graphics graphics,
            BaseChart chart, List cps, Rectangle bounds, Point pt)
        {
            _Graphics = graphics;
            _Chart = chart;
            _CrosshairPoints = cps;
            _Bounds = bounds;
            _Point = pt;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the list of CrosshairPoints
        /// 
        public List CrosshairPoints
        {
            get { return (_CrosshairPoints); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        /// 
        /// Gets the bounding chart Rectangle
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        /// 
        /// Gets the associated mouse position
        /// 
        public Point Point
        {
            get { return (_Point); }
        }
        #endregion
    }
    #endregion
    #region RenderCrosshairLabelItemEventArgs
    /// 
    /// RenderCrosshairLabelItemEventArgs
    /// 
    public class RenderCrosshairLabelItemEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private BaseChart _Chart;
        private CrosshairPoint _CrosshairPoint;
        private Rectangle _Bounds;
        private CrosshairVisualStyle _Style;
        #endregion
        /// 
        /// RenderCrosshairLabelItemEventArgs
        /// 
        /// Graphics
        /// BaseChart
        /// CrosshairPoint
        /// Bounding rectangle
        /// Style
        public RenderCrosshairLabelItemEventArgs(Graphics graphics,
            BaseChart chart, CrosshairPoint cp, Rectangle bounds, CrosshairVisualStyle style)
        {
            _Graphics = graphics;
            _Chart = chart;
            _CrosshairPoint = cp;
            _Bounds = bounds;
            _Style = style;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart
        /// 
        public BaseChart Chart
        {
            get { return (_Chart); }
        }
        /// 
        /// Gets the associated CrosshairPoint
        /// 
        public CrosshairPoint CrosshairPoint
        {
            get { return (_CrosshairPoint); }
        }
        /// 
        /// Gets the Crosshair style
        /// 
        public CrosshairVisualStyle Style
        {
            get { return (_Style); }
        }
        /// 
        /// Gets the bounding chart Rectangle
        /// 
        public Rectangle Bounds
        {
            get { return (_Bounds); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region RenderPieRingOutEventArgs
    /// 
    /// RenderSliceCenterLineEventArgs
    /// 
    public class RenderPieRingOutEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private Rectangle _RingOutBounds;
        #endregion
        /// 
        /// RenderPieRingOutEventArgs
        /// 
        /// 
        /// 
        /// 
        public RenderPieRingOutEventArgs(Graphics graphics, PieChart pieChart, Rectangle r)
        {
            _Graphics = graphics;
            _PieChart = pieChart;
            _RingOutBounds = r;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated Ring-Out indicator bounds.
        /// 
        public Rectangle RingOutBounds
        {
            get { return (_RingOutBounds); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region RenderSliceCenterLineEventArgs
    /// 
    /// RenderSliceCenterLineEventArgs
    /// 
    public class RenderSliceCenterLineEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private PieSeriesPoint _PieSeriesPoint;
        private Point _PtInner;
        private Point _PtOuter;
        #endregion
        /// 
        /// RenderSliceCenterLineEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public RenderSliceCenterLineEventArgs(Graphics graphics,
            PieChart pieChart, PieSeriesPoint psp, Point ptInner, Point ptOuter)
        {
            _Graphics = graphics;
            _PieChart = pieChart;
            _PieSeriesPoint = psp;
            _PtInner = ptInner;
            _PtOuter = ptOuter;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated PieSeriesPoint
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (_PieSeriesPoint); }
        }
        /// 
        /// Gets the inner Point for the CenterLine.
        /// 
        public Point PtInner
        {
            get { return (_PtInner); }
        }
        /// 
        /// Gets the outer Point for the CenterLine.
        /// 
        public Point PtOuter
        {
            get { return (_PtOuter); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region RenderSliceInnerLabelEventArgs
    /// 
    /// RenderSliceInnerLabelEventArgs
    /// 
    public class RenderSliceInnerLabelEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private PieSeriesPoint _PieSeriesPoint;
        private string _Text;
        private bool _Displayed;
        #endregion
        /// 
        /// RenderSliceInnerLabelEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public RenderSliceInnerLabelEventArgs(Graphics graphics,
            PieChart pieChart, PieSeriesPoint psp, string text, bool displayed)
        {
            _Graphics = graphics;
            _PieChart = pieChart;
            _PieSeriesPoint = psp;
            _Text = text;
            _Displayed = displayed;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated PieSeriesPoint
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (_PieSeriesPoint); }
        }
        /// 
        /// Gets the label text.
        /// 
        public string Text
        {
            get { return (_Text); }
        }
        /// 
        /// Gets or sets whether the label text was displayed. This value
        /// will determine whether the lable will be displayed as an outer
        /// label when SliceLabelDisplayMode is set to InnerXorOuter.
        /// 
        public bool Displayed
        {
            get { return (_Displayed); }
            set { _Displayed = value; }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region RenderSliceOuterLabelEventArgs
    /// 
    /// RenderSliceOuterLabelEventArgs
    /// 
    public class RenderSliceOuterLabelEventArgs : CancelEventArgs
    {
        #region Private variables
        private Graphics _Graphics;
        private PieChart _PieChart;
        private PieSeriesPoint _PieSeriesPoint;
        private PieLabel _PieLabel;
        #endregion
        /// 
        /// RenderSliceOuterLabelEventArgs
        /// 
        /// 
        /// 
        /// 
        /// 
        public RenderSliceOuterLabelEventArgs(
            Graphics graphics, PieChart pieChart, PieSeriesPoint psp, PieLabel pl)
        {
            _Graphics = graphics;
            _PieChart = pieChart;
            _PieSeriesPoint = psp;
            _PieLabel = pl;
        }
        #region Public properties
        /// 
        /// Gets the associated PieChart
        /// 
        public PieChart PieChart
        {
            get { return (_PieChart); }
        }
        /// 
        /// Gets the associated PieSeriesPoint
        /// 
        public PieSeriesPoint PieSeriesPoint
        {
            get { return (_PieSeriesPoint); }
        }
        /// 
        /// Gets the PieLabel defining the label.
        /// 
        public PieLabel PieLabel
        {
            get { return (_PieLabel); }
        }
        /// 
        /// Gets the associated Graphics object
        /// 
        public Graphics Graphics
        {
            get { return (_Graphics); }
        }
        #endregion
    }
    #endregion
    #region SelectionChangedEventArgs
    /// 
    /// SelectionChangedEventArgs
    /// 
    public class SelectionChangedEventArgs : EventArgs
    {
        #region Private variables
        private ChartVisualElement _Item;
        private bool _OldState;
        private bool _NewState;
        private int _SelectedCount;
        #endregion
        ///
        /// SelectionChangedEventArgs
        ///
        ///Associated items changing selected state
        ///Old selected state
        ///New selected state
        ///Resultant total selected item count
        public SelectionChangedEventArgs(
            ChartVisualElement item, bool oldState, bool newState, int selectedCount)
        {
            _Item = item;
            _OldState = oldState;
            _NewState = newState;
            _SelectedCount = selectedCount;
        }
        #region Public properties
        /// 
        /// Gets the associated item.
        /// 
        public ChartVisualElement Item
        {
            get { return (_Item); }
        }
        /// 
        /// Gets the old / previous selected state.
        /// 
        public bool OldState
        {
            get { return (_OldState); }
        }
        /// 
        /// Gets the new / current selected state.
        /// 
        public bool NewState
        {
            get { return (_NewState); }
        }
        /// 
        /// Gets the resultant selected item count.
        /// 
        public int SelectedCount
        {
            get { return (_SelectedCount); }
        }
        #endregion
    }
    #endregion
    #region SeriesDataBindingCompleteEventArgs
    /// 
    /// SeriesDataBindingCompleteEventArgs
    /// 
    public class SeriesDataBindingCompleteEventArgs : EventArgs
    {
        #region Private variables
        private BaseChart _BaseChart;
        private BaseSeries _BaseSeries;
        private object _Source;
        #endregion
        ///
        /// SeriesDataBindingCompleteEventArgs
        ///
        public SeriesDataBindingCompleteEventArgs(BaseChart chart, BaseSeries series, object source)
        {
            _BaseChart = chart;
            _BaseSeries = series;
            _Source = source;
        }
        #region Public properties
        /// 
        /// Gets the associated BaseChart that was bound.
        /// 
        public BaseChart BaseChart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated Chart that was bound.
        /// 
        public BaseChart Chart
        {
            get { return (_BaseChart); }
        }
        /// 
        /// Gets the associated ChartXy that was bound.
        /// 
        public ChartXy ChartXy
        {
            get { return (_BaseChart as ChartXy); }
        }
        /// 
        /// Gets the associated PieChart that was bound.
        /// 
        public PieChart PieChart
        {
            get { return (_BaseChart as PieChart); }
        }
        /// 
        /// Gets the associated BaseSeries that was bound.
        /// 
        public BaseSeries BaseSeries
        {
            get { return (_BaseSeries); }
        }
        /// 
        /// Gets the associated ChartSeries that was bound.
        /// 
        public ChartSeries ChartSeries
        {
            get { return (_BaseSeries as ChartSeries); }
        }
        /// 
        /// Gets the associated PieSeries that was bound.
        /// 
        public PieSeries PieSeries
        {
            get { return (_BaseSeries as PieSeries); }
        }
        /// 
        /// Gets the data source that was bound to.
        /// 
        public object Source
        {
            get { return (_Source); }
        }
        #endregion
    }
    #endregion
    #endregion
    #region Attributes
    /// 
    /// Attribute to control the visibility of individual fields
    /// or properties in an IList data source to the ChartControl.
    /// 
    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
    public class IsVisibleToChartControl : Attribute
    {
        private bool _Visible;
        /// 
        /// IsVisibleToChartControl
        /// 
        /// 
        public IsVisibleToChartControl(bool visible)
        {
            _Visible = visible;
        }
        /// 
        /// Visible
        /// 
        public bool Visible
        {
            get { return (_Visible); }
            set { _Visible = value; }
        }
    }
    #endregion
}