Tab Stops in GDI+

This article has been excerpted from book "Graphics Programming with GDI+".

Along with the properties discussed in the preceding section, the StringFormat class provides some methods. The GetTabStops and SetTabStops methods can be used to get and set tab stops, respectively. Each of these methods takes two arguments: firstTabOffset and tabStops. The first parameter, firstTabOffset, is a float value that represents the number of spaces between the beginning of a line of text and the first tab stop. The second parameter, tabstops, is an array of float values that represents the number of spaces between tabs.

An application can use the SetTabStops method to generate tabular output on a graphics surface. For example, Listing 5.10 uses SetTabStops to generate a tabular data report. In this example we create a StringFormat object and set its tab stops using the SetTabStops method, and then we call the DrawString method.

In Listing 5.10 we create a table that lists the grades of a student in tabular format. The table has four columns: ID, Math, Physics, and Chemistry. These columns list the grades obtained by a student. As the listing shows we create a StringFormat object and set the tab stops using the SetTabStops method.

LISTING 5:10: Using tab stops to draw tabular data on a graphics surface

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
    public partial class Form1 : Form
        public Form1()

        private void Form1_Paint(object sender, PaintEventArgs e)

            //Create a Graphics object
            Graphics g = this.CreateGraphics();

            //Some text data
            string text = "ID\tMath\tPhysics\tChemistry\n";
            text = text +
            "------- - \t ------- - \t ------- - \t ------- - \n";
            text = text + "1002\t76\t89\t92\n";
            text = text + "1003\t53\t98\t90\n";
            text = text + "1008\t99\t78\t65\n";
            //Create a font
             Font verdanaFont =
            new Font("Verdana", 10, FontStyle.Bold);
            Font tahomaFont =
            new Font("Tahoma", 16);
            //Create brushes

            SolidBrush blackBrush = new SolidBrush(Color.Black);
            SolidBrush redBrush = new SolidBrush(Color.Red);

            //Create rectangle
            Rectangle rect = new Rectangle(10, 50, 350, 250);

            //Create a StringFormat object
            StringFormat strFormat = new StringFormat();

            //Set tab stops of String format
            strFormat.SetTabStops(5, new float[] { 80, 100, 80, 80 });

            //Draw String
            g.DrawString("Student Grade Table",
            blackBrush, new Rectangle
            (10, 10, 300, 100));
            tahomaFont, blackBrush,
            new Rectangle(10, 23, 300, 100));

            //Draw string with tab stops
            g.DrawString(text, verdanaFont, redBrush, rect, strFormat);

            //Dispose of GDI+ objects

Figure 5.15 shows the output from Listing 5.10. It's easy to present text data in a tabular form by simply using the StringFormat class and its properties.


FIGURE 5.15: Drawing tabbed text on a form


Hope the article would have helped you in understanding using Tab Stops in GDI+. Read other articles on GDI+ on the website.

This book teaches .NET developers how to work with GDI+ as they develop applications that include graphics, or that interact with monitors or printers. It begins by explaining the difference between GDI and GDI+, and covering the basic concepts of graphics programming in Windows.