我想转发Console
输出到Windows窗体TextBox
控制。所以我连着定制TextWriter
到追加输出到Console
的TextBox
。
但我认为TextWriter
或TextBox
是从外部类中不可访问。如何解决这一问题?检查下面我的代码:
partial class Form1 : Form
{
public StringWriter _TextWriter;
public Form1()
{
InitializeComponent();
this._TextWriter = new TextBoxStreamWriter(this.textBox1);
Console.SetOut(this._TextWriter);
Console.WriteLine("This text does appear in the TextBox, works perfect.");
Test ConsoleOutputExternalClass = new Test();
}
}
public class TextBoxStreamWriter : StringWriter
{
TextBox _output = null;
public TextBoxStreamWriter(TextBox output)
{
this._output = output;
}
public override void WriteLine(string value)
{
base.WriteLine(value);
this._output.AppendText(value.ToString());
}
public override Encoding Encoding
{
get
{
return Encoding.UTF8;
}
}
}
private class Test
{
public Test()
{
// HERE I GET AN EXCEPTION ERROR !!
Console.WriteLine("System.IO.IOException: 'The handle is invalid.'");
}
}
当我尝试后发现,问题还有另外一个原因比我的预期。在我的节目我用Console.Clear()
删除所有的印刷线,但显然这也破坏了链接到自定义设置输出流。
而这将不明确的文本框毕竟,我应该使用TextBox.Clear()
。
我很后悔的,因为我的问题是不是在这种情况下来看,问题似乎在于别的地方。事实上,在我的问题的代码没有很好地工作,因为没有呼叫Console.Clear()
,但我就是没有搞清楚是什么导致了这个问题。
真正的问题是:如何“覆盖” Console.Clear()
以清除文本框?但是,这是另外一个话题。