代码之家  ›  专栏  ›  技术社区  ›  DeusAduro

将控制台输出绑定到RichEdit

  •  3
  • DeusAduro  · 技术社区  · 14 年前

    这么简单的问题。我有一个c#.dll,里面有很多控制台。Writeline并希望能够使用此.dll在窗体应用程序中查看该输出。有没有相对简单的方法将控制台输出绑定到RichEdit(或其他合适的控件)?或者,我可以在表单中嵌入一个实际的控制台shell吗?我发现了一些有点类似的问题,但在大多数情况下,人们希望能够接收控制台输入,这对我来说是没有必要的。

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Hans Passant    14 年前

    你可以用控制台放线()重定向输出。下面是一个示例表单,演示了该方法。在窗体上放置一个RichTextBox和一个按钮。

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            button1.Click += button1_Click;
            Console.SetOut(new MyLogger(richTextBox1));
        }
        class MyLogger : System.IO.TextWriter {
            private RichTextBox rtb;
            public MyLogger(RichTextBox rtb) { this.rtb = rtb; }
            public override Encoding Encoding { get { return null; } }
            public override void Write(char value) {
                if (value != '\r') rtb.AppendText(new string(value, 1));
            }
        }
        private void button1_Click(object sender, EventArgs e) {
            Console.WriteLine(DateTime.Now);
        }
    }
    

        2
  •  3
  •   Marc Gravell    14 年前

    在IMO看来,最好重构现有代码,替换现有代码 Console.WriteLine TextWriter :

    private static TextWriter output = Console.Out;
    public static TextWriter Output {
       get {return output;}
       set {output = value ?? Console.Out;}
    }
    public static void WriteLine(string value) {
        output.WriteLine(value);
    }
    public static void WriteLine(string format, params string[] args) {
        output.WriteLine(format, args);
    }
    

    到你现有的代码中去写?