2012-02-24 40 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()