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
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