public static void MeasureTexts(
            this Graphics g, TextWithInfo[] texts, Rectangle bounds)
        {
            if (g == null)
                throw new ArgumentNullException("g");
            if (texts == null)
                throw new ArgumentNullException("texts");
            if (texts.Length == 0)
                return;

            // Shrink the bounding rectangle to exclude the leading and
            // trailing paddings when rendering text.
            int padding = g.GetTextPadding(texts[0].Font);
            bounds = new Rectangle(
                bounds.Left + padding,
                bounds.Top,
                bounds.Width - padding * 2,
                bounds.Height);

            TextFormatFlags flags =
                TextFormatFlags.NoPadding |
                TextFormatFlags.SingleLine |
                TextFormatFlags.PreserveGraphicsClipping |
                //TextFormatFlags.GlyphOverhangPadding |
                //TextFormatFlags.ExternalLeading |
                TextFormatFlags.VerticalCenter;

            for (int i = 0; i < texts.Length; i++)
            {
                Size size = TextRenderer.MeasureText(
                    g, texts[i].Text, texts[i].Font, bounds.Size, flags);

                texts[i].Bounds = new Rectangle(
                    bounds.X,
                    bounds.Y + (bounds.Height - size.Height) / 2,
                    Math.Min(size.Width, bounds.Width),
                    size.Height);

                bounds = new Rectangle(
                    bounds.X + size.Width,
                    bounds.Y,
                    Math.Max(0, bounds.Width - size.Width),
                    bounds.Height);
            }
        }
        public static void DrawTexts(this Graphics g, TextWithInfo[] texts)
        {
            if (g == null)
                throw new ArgumentNullException("g");
            if (texts == null)
                throw new ArgumentNullException("texts");

            TextFormatFlags flags =
                TextFormatFlags.NoPadding |
                TextFormatFlags.SingleLine |
                TextFormatFlags.PreserveGraphicsClipping |
                //TextFormatFlags.GlyphOverhangPadding |
                //TextFormatFlags.ExternalLeading |
                TextFormatFlags.VerticalCenter;

            for (int i = 0; i < texts.Length; i++)
            {
                if (texts[i].Bounds.Width > 0)
                {
                    TextRenderer.DrawText(g, texts[i].Text, texts[i].Font, texts[i].Bounds, texts[i].Color, flags);
                }
            }
        }