/// <summary>
        ///
        /// </summary>
        /// <param name="G"></param>
        private void DrawBorder(Graphics G)
        {
            try
            {
                if (SelectedIndex != -1)
                {
                    Rectangle tabRect = GetTabRect(SelectedIndex);

                    Rectangle clipRect = ClientRectangle;

                    Point[] points = new Point[6];

                    IntPtr upDownButtonHandle = UpDownButtonHandle;

                    bool hasUpDown = upDownButtonHandle != IntPtr.Zero;

                    if (hasUpDown)
                    {
                        if (TabControlNativeMethods.IsWindowVisible(upDownButtonHandle))
                        {
                            TabControlNativeMethods.RECT upDownButtonRect = new TabControlNativeMethods.RECT();

                            TabControlNativeMethods.GetWindowRect(upDownButtonHandle, ref upDownButtonRect);

                            Rectangle upDownRect = Rectangle.FromLTRB(
                                upDownButtonRect.Left,
                                upDownButtonRect.Top,
                                upDownButtonRect.Right,
                                upDownButtonRect.Bottom);

                            upDownRect = RectangleToClient(upDownRect);

                            tabRect.X = tabRect.X > upDownRect.X ? upDownRect.X : tabRect.X;

                            tabRect.Width = tabRect.Right > upDownRect.X ? upDownRect.X - tabRect.X : tabRect.Width;
                        }
                    }

                    switch (Alignment)
                    {
                    case TabAlignment.Top:
                        points[0] = new Point(
                            tabRect.X,
                            tabRect.Bottom);
                        points[1] = new Point(
                            clipRect.X,
                            tabRect.Bottom);
                        points[2] = new Point(
                            clipRect.X,
                            clipRect.Bottom - 1);
                        points[3] = new Point(
                            clipRect.Right - 1,
                            clipRect.Bottom - 1);
                        points[4] = new Point(
                            clipRect.Right - 1,
                            tabRect.Bottom);
                        points[5] = new Point(
                            tabRect.Right,
                            tabRect.Bottom);
                        break;

                    case TabAlignment.Bottom:
                        points[0] = new Point(
                            tabRect.X,
                            tabRect.Y);
                        points[1] = new Point(
                            clipRect.X,
                            tabRect.Y);
                        points[2] = new Point(
                            clipRect.X,
                            clipRect.Y);
                        points[3] = new Point(
                            clipRect.Right - 1,
                            clipRect.Y);
                        points[4] = new Point(
                            clipRect.Right - 1,
                            tabRect.Y);
                        points[5] = new Point(
                            tabRect.Right,
                            tabRect.Y);
                        break;

                    case TabAlignment.Left:
                        points[0] = new Point(
                            tabRect.Right,
                            tabRect.Y);
                        points[1] = new Point(
                            tabRect.Right,
                            clipRect.Y);
                        points[2] = new Point(
                            clipRect.Right - 1,
                            clipRect.Y);
                        points[3] = new Point(
                            clipRect.Right - 1,
                            clipRect.Bottom - 1);
                        points[4] = new Point(
                            tabRect.Right,
                            clipRect.Bottom - 1);
                        points[5] = new Point(
                            tabRect.Right,
                            tabRect.Bottom);
                        break;

                    case TabAlignment.Right:
                        points[0] = new Point(
                            tabRect.X,
                            tabRect.Y);
                        points[1] = new Point(
                            tabRect.X,
                            clipRect.Y);
                        points[2] = new Point(
                            clipRect.X,
                            clipRect.Y);
                        points[3] = new Point(
                            clipRect.X,
                            clipRect.Bottom - 1);
                        points[4] = new Point(
                            tabRect.X,
                            clipRect.Bottom - 1);
                        points[5] = new Point(
                            tabRect.X,
                            tabRect.Bottom);
                        break;
                    }
                    using (Pen pen = new Pen(_BorderColor))
                    {
                        G.DrawLines(pen, points);
                    }
                }
            }
            catch { }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="G"></param>
        private void DrawTabPages(Graphics G)
        {
            try
            {
                Rectangle tabRect;

                Point cusorPoint = PointToClient(MousePosition);

                bool hover;

                bool selected;

                bool hasSetClip = false;

                bool alignHorizontal = (Alignment == TabAlignment.Top || Alignment == TabAlignment.Bottom);

                LinearGradientMode mode = alignHorizontal ? LinearGradientMode.Vertical : LinearGradientMode.Horizontal;

                if (alignHorizontal)
                {
                    IntPtr upDownButtonHandle = UpDownButtonHandle;

                    bool hasUpDown = upDownButtonHandle != IntPtr.Zero;

                    if (hasUpDown)
                    {
                        if (TabControlNativeMethods.IsWindowVisible(upDownButtonHandle))
                        {
                            TabControlNativeMethods.RECT upDownButtonRect = new TabControlNativeMethods.RECT();

                            TabControlNativeMethods.GetWindowRect(upDownButtonHandle, ref upDownButtonRect);

                            Rectangle upDownRect = Rectangle.FromLTRB(
                                upDownButtonRect.Left,
                                upDownButtonRect.Top,
                                upDownButtonRect.Right,
                                upDownButtonRect.Bottom);

                            upDownRect = RectangleToClient(upDownRect);

                            switch (Alignment)
                            {
                            case TabAlignment.Top:
                                upDownRect.Y = 0;
                                break;

                            case TabAlignment.Bottom:
                                upDownRect.Y =
                                    ClientRectangle.Height - DisplayRectangle.Height;
                                break;
                            }
                            upDownRect.Height = ClientRectangle.Height;
                            G.SetClip(upDownRect, CombineMode.Exclude);
                            hasSetClip = true;
                        }
                    }
                }

                for (int index = 0; index < base.TabCount; index++)
                {
                    TabPage page = TabPages[index];

                    tabRect  = GetTabRect(index);
                    hover    = tabRect.Contains(cusorPoint);
                    selected = SelectedIndex == index;

                    Color baseColor   = _BaseColor;
                    Color borderColor = _BorderColor;

                    if (selected)
                    {
                        baseColor = GetColor(_BaseColor, 0, -45, -30, -14);
                    }
                    else if (hover)
                    {
                        baseColor = GetColor(_BaseColor, 0, 35, 24, 9);
                    }

                    RenderTabBackgroundInternal(
                        G,
                        tabRect,
                        baseColor,
                        borderColor,
                        .45F,
                        mode);

                    bool hasImage = DrawTabImage(G, page, tabRect);

                    DrawtabText(G, page, tabRect, hasImage);
                }
                if (hasSetClip)
                {
                    G.ResetClip();
                }
            }
            catch { }
        }