/// <summary>
        /// Raises the MouseMove event.
        /// </summary>
        /// <param name="e">A MouseEventArgs that contains the event data.</param>
        protected override void OnMouseMove(MouseEventArgs e)
        {
            //	Call the base class's method so that registered delegates receive the event.
            base.OnMouseMove(e);

            //	Update the state of the MouseInside property if the LeftMouseButtonDown property
            //	is true.
            if (LeftMouseButtonDown)
            {
                MouseInside = VirtualClientRectangle.Contains(e.X, e.Y);
            }
            else
            {
                MouseInside = true;
            }
        }
        /// <summary>
        /// Raises the MouseUp event.
        /// </summary>
        /// <param name="e">A MouseEventArgs that contains the event data.</param>
        protected override void OnMouseUp(MouseEventArgs e)
        {
            //	Call the base class's method so that registered delegates receive the event.
            base.OnMouseUp(e);

            //	No mouse inside until it moves again.
            MouseInside = false;

            //	If the button is the left button, set the LeftMouseButtonDown property.
            if (e.Button == MouseButtons.Left)
            {
                LeftMouseButtonDown = false;

                if (VirtualClientRectangle.Contains(e.X, e.Y))
                {
                    OnPushed(EventArgs.Empty);
                }
            }
        }