This documentation is archived and is not being maintained.

IndentedTextWriter Class

Provides a text writer that can indent new lines by a tab string token.

For a list of all members of this type, see IndentedTextWriter Members.

System.Object
   System.MarshalByRefObject
      System.IO.TextWriter
         System.CodeDom.Compiler.IndentedTextWriter

[Visual Basic]
Public Class IndentedTextWriter
   Inherits TextWriter
[C#]
public class IndentedTextWriter : TextWriter
[C++]
public __gc class IndentedTextWriter : public TextWriter
[JScript]
public class IndentedTextWriter extends TextWriter

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Remarks

IndentedTextWriter extends a TextWriter by providing methods that insert a tab string and track the current indentation level. Text formatted with multiple indentation levels is useful for generated code, so this class is used by CodeDOM code generator implementations.

The tab string is the string that each indentation consists of. Typically the tab string contains white space.

Example

[Visual Basic, C#, C++] The following code example demonstrates using an IndentedTextWriter to write text at different levels of indentation.

[Visual Basic] 
Imports System
Imports System.CodeDom
Imports System.CodeDom.Compiler
Imports System.ComponentModel
Imports System.IO
Imports System.Windows.Forms

Public Class Form1
   Inherits System.Windows.Forms.Form
   Private textBox1 As System.Windows.Forms.TextBox 
   
   Private Function CreateMultilevelIndentString() As String
        ' Create a TextWriter to use as the base output writer.
        Dim baseTextWriter As New System.IO.StringWriter
      
        ' Create an IndentedTextWriter and set the tab string to use 
        ' as the indentation string for each indentation level.
        Dim indentWriter = New IndentedTextWriter(baseTextWriter, "    ")

        ' Set the indentation level.
        indentWriter.Indent = 0

        ' Output test strings at stepped indentations through a recursive loop method.
        WriteLevel(indentWriter, 0, 5)
      
        ' Return the resulting string from the base StringWriter.
        Return baseTextWriter.ToString()
    End Function

    Private Sub WriteLevel(ByVal indentWriter As IndentedTextWriter, ByVal level As Integer, ByVal totalLevels As Integer)
        ' Outputs a test string with a new-line character at the end.
        indentWriter.WriteLine(("This is a test phrase. Current indentation level: " + level.ToString()))

        ' If not yet at the highest recursion level, call this output method for the next level of indentation.
        If level < totalLevels Then
            ' Increase the indentation count for the next level of indented output.
            indentWriter.Indent += 1

            ' Call the WriteLevel method to write test output for the next level of indentation.
            WriteLevel(indentWriter, level + 1, totalLevels)

            ' Restores the indentation count for this level after the recursive branch method has returned.
            indentWriter.Indent -= 1

        Else
            ' Output a string using the WriteLineNoTabs method.
            indentWriter.WriteLineNoTabs("This is a test phrase written with the IndentTextWriter.WriteLineNoTabs method.")
        End If

        ' Outputs a test string with a new-line character at the end.
        indentWriter.WriteLine(("This is a test phrase. Current indentation level: " + level.ToString()))
    End Sub

    Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        textBox1.Text = CreateMultilevelIndentString()
    End Sub

    Public Sub New()
        Dim button1 As New System.Windows.Forms.Button
        Me.textBox1 = New System.Windows.Forms.TextBox
        Me.SuspendLayout()
        Me.textBox1.Anchor = CType(System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right, System.Windows.Forms.AnchorStyles)
        Me.textBox1.Location = New System.Drawing.Point(8, 40)
        Me.textBox1.Multiline = True
        Me.textBox1.Name = "textBox1"
        Me.textBox1.Size = New System.Drawing.Size(391, 242)
        Me.textBox1.TabIndex = 0
        Me.textBox1.Text = ""
        button1.Location = New System.Drawing.Point(11, 8)
        button1.Name = "button1"
        button1.Size = New System.Drawing.Size(229, 23)
        button1.TabIndex = 1
        button1.Text = "Generate string using IndentedTextWriter"
        AddHandler button1.Click, AddressOf Me.button1_Click
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(407, 287)
        Me.Controls.Add(button1)
        Me.Controls.Add(Me.textBox1)
        Me.Name = "Form1"
        Me.Text = "IndentedTextWriter example"
        Me.ResumeLayout(False)
    End Sub

    <STAThread()> _
    Shared Sub Main()
        Application.Run(New Form1)
    End Sub
End Class

[C#] 
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;

namespace IndentedTextWriterExample
{
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.TextBox textBox1;

        private string CreateMultilevelIndentString()
        {
            // Creates a TextWriter to use as the base output writer.
            System.IO.StringWriter baseTextWriter = new System.IO.StringWriter();            

            // Create an IndentedTextWriter and set the tab string to use 
            // as the indentation string for each indentation level.
            System.CodeDom.Compiler.IndentedTextWriter indentWriter = new IndentedTextWriter(baseTextWriter, "    ");           

            // Sets the indentation level.
            indentWriter.Indent = 0;

            // Output test strings at stepped indentations through a recursive loop method.
            WriteLevel(indentWriter, 0, 5);

            // Return the resulting string from the base StringWriter.
            return baseTextWriter.ToString();
        }

        private void WriteLevel(IndentedTextWriter indentWriter, int level, int totalLevels)
        {
            // Output a test string with a new-line character at the end.
            indentWriter.WriteLine("This is a test phrase. Current indentation level: "+level.ToString());
            
            // If not yet at the highest recursion level, call this output method for the next level of indentation.
            if( level < totalLevels )
            {
                // Increase the indentation count for the next level of indented output.
                indentWriter.Indent++;

                // Call the WriteLevel method to write test output for the next level of indentation.
                WriteLevel(indentWriter, level+1, totalLevels);

                // Restores the indentation count for this level after the recursive branch method has returned.
                indentWriter.Indent--;
            }
            else
                // Outputs a string using the WriteLineNoTabs method.
                indentWriter.WriteLineNoTabs("This is a test phrase written with the IndentTextWriter.WriteLineNoTabs method.");

            // Outputs a test string with a new-line character at the end.
            indentWriter.WriteLine("This is a test phrase. Current indentation level: "+level.ToString());           
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            textBox1.Text = CreateMultilevelIndentString();
        }

        public Form1()
        {
            System.Windows.Forms.Button button1 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();            
            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right)));
            this.textBox1.Location = new System.Drawing.Point(8, 40);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(391, 242);
            this.textBox1.TabIndex = 0;
            this.textBox1.Text = "";
            button1.Location = new System.Drawing.Point(11, 8);
            button1.Name = "button1";
            button1.Size = new System.Drawing.Size(229, 23);
            button1.TabIndex = 1;
            button1.Text = "Generate string using IndentedTextWriter";
            button1.Click += new System.EventHandler(this.button1_Click);
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(407, 287);
            this.Controls.Add(button1);
            this.Controls.Add(this.textBox1);
            this.Name = "Form1";
            this.Text = "IndentedTextWriter example";
            this.ResumeLayout(false);        
        }

        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }
    }
}

[C++] 
#using <mscorlib.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
#using <System.dll>
using namespace System;
using namespace System::CodeDom;
using namespace System::CodeDom::Compiler;
using namespace System::ComponentModel;
using namespace System::IO;
using namespace System::Windows::Forms;

public __gc class Form1 : public System::Windows::Forms::Form
{
private:
   System::Windows::Forms::TextBox* textBox1;

private:
   String* CreateMultilevelIndentString()
   {
      // Creates a TextWriter to use as the base output writer.
      System::IO::StringWriter* baseTextWriter = new System::IO::StringWriter();            

      // Create an IndentedTextWriter and set the tab string to use 
      // as the indentation string for each indentation level.
      System::CodeDom::Compiler::IndentedTextWriter* indentWriter = new IndentedTextWriter(baseTextWriter, S"    ");           

      // Sets the indentation level.
      indentWriter->Indent = 0;

      // Output test strings at stepped indentations through a recursive loop method.
      WriteLevel(indentWriter, 0, 5);

      // Return the resulting string from the base StringWriter.
      return baseTextWriter->ToString();
   }

private:
   void WriteLevel(IndentedTextWriter* indentWriter, int level, int totalLevels)
   {
      // Output a test string with a new-line character at the end.
      indentWriter->WriteLine(S"This is a test phrase. Current indentation level: {0}",__box(level));

      // If not yet at the highest recursion level, call this output method for the next level of indentation.
      if( level < totalLevels )
      {
         // Increase the indentation count for the next level of indented output.
         indentWriter->Indent++;

         // Call the WriteLevel method to write test output for the next level of indentation.
         WriteLevel(indentWriter, level+1, totalLevels);

         // Restores the indentation count for this level after the recursive branch method has returned.
         indentWriter->Indent--;
      }
      else
         // Outputs a string using the WriteLineNoTabs method.
         indentWriter->WriteLineNoTabs(S"This is a test phrase written with the IndentTextWriter.WriteLineNoTabs method.");

      // Outputs a test string with a new-line character at the end.
      indentWriter->WriteLine(S"This is a test phrase. Current indentation level: {0}",__box(level));           
   }

private:
   void button1_Click(Object* /*sender*/, System::EventArgs* /*e*/)
   {
      textBox1->Text = CreateMultilevelIndentString();
   }

public:
   Form1()
   {
      System::Windows::Forms::Button* button1 = new System::Windows::Forms::Button();
      this->textBox1 = new System::Windows::Forms::TextBox();
      this->SuspendLayout();            
      this->textBox1->Anchor = (System::Windows::Forms::AnchorStyles)(
         System::Windows::Forms::AnchorStyles::Top
         | System::Windows::Forms::AnchorStyles::Bottom 
         | System::Windows::Forms::AnchorStyles::Left 
         | System::Windows::Forms::AnchorStyles::Right);
      this->textBox1->Location = System::Drawing::Point(8, 40);
      this->textBox1->Multiline = true;
      this->textBox1->Name = S"textBox1";
      this->textBox1->Size = System::Drawing::Size(391, 242);
      this->textBox1->TabIndex = 0;
      this->textBox1->Text = S"";
      button1->Location = System::Drawing::Point(11, 8);
      button1->Name = S"button1";
      button1->Size = System::Drawing::Size(229, 23);
      button1->TabIndex = 1;
      button1->Text = S"Generate string using IndentedTextWriter";
      button1->Click += new System::EventHandler(this, &Form1::button1_Click);
      this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
      this->ClientSize = System::Drawing::Size(407, 287);
      this->Controls->Add(button1);
      this->Controls->Add(this->textBox1);
      this->Name = S"Form1";
      this->Text = S"IndentedTextWriter example";
      this->ResumeLayout(false);        
   }

};

[STAThread]
int main() 
{
   Application::Run(new Form1());
}

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Namespace: System.CodeDom.Compiler

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

Assembly: System (in System.dll)

See Also

IndentedTextWriter Members | System.CodeDom.Compiler Namespace

Show: