首先创建一个TextWriter
能够写入文本框的新文件。它只需要覆盖Write
接受 a 的方法char
,但这会非常低效,因此最好至少用字符串覆盖该方法。
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; }
}
}
在这种情况下,我让它只接受 a Control
,它可以是 a Textbox
、 aLabel
或其他。如果你想把它改成一个Label
就好了。
然后只需将控制台输出设置为此编写器的新实例,指向某个文本框或标签:
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));