2012-02-24 56 views
1

如果我有这样的GUI:显示输出和错误中的RichTextBox

--------------------- 

[Button] 

--------------------- 
[RichTextbox_output] 

--------------------- 

是否可以显示所有:在RichTextBox的

输出和错误,我可以从“输出”看diaglog的视觉工作室?

在此先感谢。

+0

通过输出,你是指你写给'Console.WriteLine'的stdout和'Console.Error.WriteLine'作为stderr,或者你在想什么其他的输出? – Dervall 2012-02-24 16:44:44

+0

是的。您正确使用Console WL和Er – olidev 2012-02-24 22:33:41

回答

5

标准输出在C#中被称为Console.Out。斯德德被称为Console.Error

要解决此问题,您需要重定向Console.Out。这可以使用Console.SetOut完成。这将需要重定向到您自己的将写入富文本框的自定义字符串编写器。这不是内置到文本框中,您需要创建自己的流实现。一种可能的解决方案是将StringWriter的子类别过载并将WriteLine方法重载到您的文本框。

public class TextBoxWriter : StringWriter 
{ 
    public override void WriteLine(string x) 
    { 
     // Write to textbox here 
    } 
} 

显然,如果您使用的不仅仅是WriteLine越多,你就必须创造这些方法的重载为好。

对于stderr流,可以采用Console.SetError的相同方法。

+3

这是重定向.NET输出的方式。但是,如果.NET程序调用使用'stdout'和'stderr'的本地函数,那么需要做更多的工作。 – 2012-02-24 17:22:51

0

对于stderr,您必须将该程序封装在try/catch块中。你在哪里捕捉到所有的错误。对于stdout,有两个选项,覆盖写入到文本框的stdout,或者直接写入到textBox而不是写入stdout。

的例外:

try { 
    // your program 
catch (Exception e){ 
    RichTextbox_output.AppendText() 
} 

这个例子需要RichTextBox的是范围之内的,所以放置在程序可能会非常棘手。

对于每一个在您使用标准输出,到位Console.write的地方,使用RichTextbox_output.AppendText()