控制台输出流的自定义文本编写器无法在外部工作 类
Custom textwriter for Console outputstream not working in external classes
我正在尝试将 Console
输出转发到 Windows 表单 TextBox
控件。所以我将自定义 TextWriter
附加到 Console
,它将输出附加到 TextBox
.
但我认为 TextWriter
或 TextBox
无法从外部 class 访问。如何解决这个问题?检查下面我的代码:
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()
删除所有打印行,但显然这也破坏了 link 到自定义设置输出流。
毕竟这不会清除文本框,我应该使用 TextBox.Clear()
。
对此我感到很抱歉,因为我的问题在这种情况下不是重点,问题似乎出在其他地方。事实上,我的问题中的代码确实可以完美运行,因为没有调用 Console.Clear()
,但我还没有找出真正导致问题的原因。
真正的问题是:如何"override" Console.Clear()
以清除文本框?但这是另一个话题。
我正在尝试将 Console
输出转发到 Windows 表单 TextBox
控件。所以我将自定义 TextWriter
附加到 Console
,它将输出附加到 TextBox
.
但我认为 TextWriter
或 TextBox
无法从外部 class 访问。如何解决这个问题?检查下面我的代码:
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()
删除所有打印行,但显然这也破坏了 link 到自定义设置输出流。
毕竟这不会清除文本框,我应该使用 TextBox.Clear()
。
对此我感到很抱歉,因为我的问题在这种情况下不是重点,问题似乎出在其他地方。事实上,我的问题中的代码确实可以完美运行,因为没有调用 Console.Clear()
,但我还没有找出真正导致问题的原因。
真正的问题是:如何"override" Console.Clear()
以清除文本框?但这是另一个话题。