首先创建一个新的TextWriter
,它能够向文本框中写入内容。 它只需要重写接受char
参数的Write
方法,但这样做效率非常低,所以最好至少覆盖使用字符串参数的该方法。
public class ControlWriter : TextWriter
{
private Control textbox;
public ControlWriter(Control textbox)
{
this.textbox = textbox;
}
public override void Write(char value)
{
textbox.Text += value;
}
public override void Write(string value)
{
textbox.Text += value;
}
public override Encoding Encoding
{
get { return Encoding.ASCII; }
}
}
在这种情况下,我已经让它接受一个“控件”,可以是一个“文本框”,一个“标签”或任何其他控件。如果您想将其更改为仅使用“标签”,那也可以。
然后,只需将控制台输出设置为指向某个文本框或标签的新编写器实例:
Console.SetOut(new ControlWriter(textbox1));
如果您希望输出不仅写入文本框,而且也写入控制台,则可以使用此类创建一个编写器,该编写器将写入多个编写器:
public class MultiTextWriter : TextWriter
{
private IEnumerable<TextWriter> writers;
public MultiTextWriter(IEnumerable<TextWriter> writers)
{
this.writers = writers.ToList();
}
public MultiTextWriter(params TextWriter[] writers)
{
this.writers = writers;
}
public override void Write(char value)
{
foreach (var writer in writers)
writer.Write(value);
}
public override void Write(string value)
{
foreach (var writer in writers)
writer.Write(value);
}
public override void Flush()
{
foreach (var writer in writers)
writer.Flush();
}
public override void Close()
{
foreach (var writer in writers)
writer.Close();
}
public override Encoding Encoding
{
get { return Encoding.ASCII; }
}
}
然后,我们可以这样做:
Console.SetOut(new MultiTextWriter(new ControlWriter(textbox1), Console.Out));