0

カスタム TraceListener でインデントをサポートするにはどうすればよいですか?

Trace.Indent();
// or
Trace.Unindent();

以下の実装があっても機能しません。

protected override void WriteIndent() { ... }

そのカスタム TraceListener で。

何か不足していますか?

4

3 に答える 3

1

TextWriterTraceListenerクラスを使用できます。インデントをサポートします。

于 2010-02-10T08:35:35.173 に答える
1

WriteIndentを自分で明示的に呼び出す必要があると思います(ドキュメントを正しく解釈した場合)。このコードは期待どおりに機能します。

using System;
using System.Xml.Serialization;
using System.Diagnostics;

class Program {

    class TestListener : TraceListener {

        protected override void WriteIndent() {
            if (NeedIndent) {
                string indent = new string(' ',IndentLevel * IndentSize);
                Console.Write(indent);
            }
        }

        public override void Write(string message) {
            WriteIndent();
            Console.Write(message);
        }

        public override void WriteLine(string message) {
            WriteIndent();
            Console.WriteLine(message);
        }
    }


    public static void Main(params string[] args) {

        Trace.Listeners.Add(new TestListener());
        Trace.IndentSize = 2;
        Trace.WriteLine("test");
        Trace.IndentLevel = 4;
        Trace.WriteLine("indented");
    }
}
于 2010-02-10T08:58:34.400 に答える
1

Traceの2つの静的メソッドがIndentLevelを変更するため、私はそれを理解しました。だから私はこれをやっています:

...
if (entry.IndentLevel > 0)
    writer.WriteLine(
        new string(' ', entry.IndentLevel * IndentSize) +
...
于 2010-02-12T22:09:19.023 に答える