如何将.NET中Console.WriteLine()的输出重定向到WinForm控件?
如何将.NET中Console.WriteLine()的输出重定向到WinForm控件?
当然可以实现!不用挨个修改代码里的Console.WriteLine(),咱们通过重定向控制台的输出流,就能把原本打印到控制台的内容直接转到WinForm的TextBox控件里。下面是一套亲测可行的完整方案:
步骤1:让承载TextBox的Form实例全局可访问
首先咱们要把显示输出的Form实例存到全局可访问的地方,这样后续的自定义输出流能拿到这个Form。可以在Program类里加个静态属性来保存Form实例:
internal static class Program { public static Form1 form1 { get; set; } [STAThread] static void Main() { form1 = new Form1(); Application.Run(form1); } }
步骤2:在Form中暴露目标TextBox控件
接下来要把咱们用来显示输出的TextBox暴露出来,让外部的自定义流能直接操作它。在Form类里加个只读属性返回这个TextBox:
public partial class Form1 : Form { public TextBox OutputConsole { get { return txtConsole; } } // 其他Form相关代码... }
步骤3:实现自定义输出流并重定向控制台输出
咱们需要先写一个继承自TextWriter的TextBoxWriter类,核心是重写写入方法,把内容输出到TextBox里:
public class TextBoxWriter : TextWriter { private TextBox _targetTextBox; public TextBoxWriter(TextBox textBox) { _targetTextBox = textBox; } public override void Write(char value) { base.Write(value); // 直接追加内容到TextBox _targetTextBox.AppendText(value.ToString()); } public override Encoding Encoding { get { return Encoding.ASCII; } } }
最后在你原本调用Console.WriteLine()的代码执行前,把控制台的输出流替换成咱们自定义的TextBoxWriter:
Console.SetOut(new TextBoxWriter(Program.form1.OutputConsole));
这样设置完成后,后续所有的Console.WriteLine()调用,内容都会自动输出到指定的TextBox控件里啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

