2015年11月14日 星期六

C# 將 console 的內容轉至 textbox

C# 將 console 的內容轉至 textbox

平常寫程式總會做一些狀態的輸出,例如現在完成了什麼、某個數值是多少(總不可能永遠都用偵錯模式看嘛),若沒用一些專門處理 log 的 library 大概就是用 Console.write 最簡單了。

當寫好的程式被用在視窗程式裡,要看到這些 console 可以用 kernel32 的 AllocConsole,但我今天就是想要顯示在 form 的 textbox 裡!

這個 Console 其實是可以設定 out 去哪裡的,呼叫 Console.SetOut(TextWriter),然後只要自己寫好一個繼承自 TextWriter 的東西就可以丟給他了,至於要 out 去哪裡就是看 TextWriter 的 Write 和 WriteLine 怎麼寫了。

在此獻上一段簡單的 code

public class ConsoleTextBoxWriter : TextWriter
{
    private TextBox textBox;

    public ConsoleTextBoxWriter(TextBox textBox)
    {
        Console.SetOut(this);
        this.textBox = textBox;
    }
    public override Encoding Encoding { get { return Encoding.UTF8; } }

    public override void Write(string value)
    {
        WriteImp(value);
    }

    public override void WriteLine(string value)
    {
        WriteImp(value + Environment.NewLine);
    }

    private void WriteImp(string value)
    {
        if (this.textBox.InvokeRequired)
            this.textBox.Invoke(new MethodInvoker(delegate()
            {
                textBox.AppendText(value);
            }));
        else
            textBox.AppendText(value);
    }
}

Written with StackEdit.

沒有留言:

張貼留言