/// <summary>
        /// Prints the control to the Graphics object defined by the PrintPageEventArgs parameter to
        /// the specified rectangle on the page using the specied scaling and grayscale specified.
        /// </summary>
        /// <param name="printDoc">Specifies the PrintDocument to which the control is drawn.</param>
        /// <param name="ppea">PrintPageEventArgs as generated through a call to PrintDocument.Print()</param>
        /// <param name="scaling">Specifies the scaling use to fit the control draw to the specified rectangle.</param>
        /// <param name="printRect">Specifes the rectangle to draw and fit the control relative to the top, left
        ///    of the MarginBounds as specified in PrintPageEventArgs.  Rectangle.Empty indicates that rectangle
        ///    specified the by the MarginBounds is assumed.  If either of the Width or Height of the rectangle is zero,
        ///    then the entire page betwteen the appropriate margins is assumed.
        /// </param>
        /// <param name="useGrayScale">If true, the control is drawn to size as a bitmap using grayscale.</param>
        public virtual void PrinterCtrlToPage(PrintDocument printDoc, PrintPageEventArgs ppea, PrintScale scaling, Rectangle printRect,
                                              bool useGrayScale)
        {
            // Preserve the PrintPageEventArgs
            GraphicsState gsave        = ppea.Graphics.Save();
            bool          hasMorePages = ppea.HasMorePages;

            UseGrayScale = useGrayScale;

            ctrlPrinter cp = new ctrlPrinter(this, this._ctrl);

            cp.printScale = scaling;
            cp.printRect  = printRect;
            cp.OnPrintCtrl(printDoc, ppea);

            // Restore the PrintPageEventArgs
            ppea.HasMorePages = hasMorePages;
            ppea.Graphics.Restore(gsave);
        }
        /// <summary>
        /// Prints the control to the specified rectangle on the page using the specied scaling.
        /// </summary>
        /// <param name="scaling">Specifies the scaling use to fit the control draw to the specified rectangle.</param>
        /// <param name="r">Specifes the rectangle to draw and fit the control relative to the top, left
        ///    of the page margins.  Rectangle.Empty indicates that rectangle specified the by the page margins is
        ///    assumed.  If either of the Width or Height of the rectangle is zero, then the entire length betwteen
        ///    the appropriate margins is assumed.
        /// </param>
        public virtual void PrintCtrl(PrintScale scaling, Rectangle r)
        {
            ctrlPrinter cp = new ctrlPrinter(this, this._ctrl);

            cp.PrintCtrl(scaling, r);
        }
        /// <summary>
        /// Prints the control to the specified rectangle on the page using the specied scaling and grayscale.
        /// </summary>
        /// <param name="scaling">Specifies the scaling use to fit the control draw to the specified rectangle.</param>
        /// <param name="r">Specifes the rectangle to draw and fit the control relative to the top, left
        ///    of the page margins.  Rectangle.Empty indicates that rectangle specified the by the page margins is
        ///    assumed.  If either of the Width or Height of the rectangle is zero, then the entire length betwteen
        ///    the appropriate margins is assumed.
        /// </param>
        /// <param name="ps">Specifies predefined a PageSettings object.</param>
        public virtual void PrintCtrl(PrintScale scaling, Rectangle r, PageSettings ps)
        {
            ctrlPrinter cp = new ctrlPrinter(this, this._ctrl);

            cp.PrintCtrl(scaling, r, ps);
        }
        /// <summary>
        /// Prints the control to the specified rectangle on the page using the specied scaling and grayscale.
        /// </summary>
        /// <param name="scaling">Specifies the scaling use to fit the control draw to the specified rectangle.</param>
        /// <param name="r">Specifes the rectangle to draw and fit the control relative to the top, left
        ///    of the page margins.  Rectangle.Empty indicates that rectangle specified the by the page margins is
        ///    assumed.  If either of the Width or Height of the rectangle is zero, then the entire length betwteen
        ///    the appropriate margins is assumed.
        /// </param>
        /// <param name="ps">Specifies predefined a PageSettings object.</param>
        /// <param name="bitmap">If true, specifies that the control is drawn as a bitmap.</param>
        /// <param name="preview">If true, a PrintPreview dialog is shown instead of drawing to a printer.</param>
        public virtual void PrintCtrl(PrintScale scaling, Rectangle r, PageSettings ps, bool bitmap, bool preview)
        {
            ctrlPrinter cp = new ctrlPrinter(this, this._ctrl);

            cp.PrintCtrl(scaling, r, ps, bitmap, preview);
        }