C#, MONO
richTextBox에 Console출력하기
gigasound
2021. 8. 9. 10:25
C# GUI를 사용하다 보면, 가끔 Console의 내용을 화면에 보여주고 싶습니다.
이때 richTextBox를 이용해서 GUI 화면에 출력이 가능합니다.
다음 내용을 참조했습니다.
https://stackoverflow.com/questions/472282/show-console-in-windows-application/15079092#15079092
https://stackoverflow.com/questions/4362111/how-do-i-show-a-console-output-window-in-a-forms-application
먼저 클래스를 추가합니다.
public delegate void StringArgReturningVoidDelegate(string text);
public class RichTextBoxWriter: TextWriter {
private readonly RichTextBox _richTextBox;
public override Encoding Encoding => Encoding.ASCII;
public RichTextBoxWriter(RichTextBox richTexttbox) {
_richTextBox = richTexttbox;
}
public override void Write(char value) {
SetText(value.ToString());
}
public override void Write(string value) {
SetText(value);
}
public override void WriteLine(char value) {
SetText(value + Environment.NewLine);
}
public override void WriteLine(string value) {
SetText(value + Environment.NewLine);
}
private void SetText(string text) {
if(_richTextBox.InvokeRequired) {
var d = new StringArgReturningVoidDelegate(SetText);
_richTextBox.Invoke(d,text);
}
else {_richTextBox.Text += text; }
}
}
그리고 다음과 같이 richTextBox를 조정합니다.
using System.IO;
public Form1() {
InitializeComponent();
Console.SetOut(new RichTextBoxWriter(this.richTextBox1));
this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
this.richTextBox1.ScrollToCaret();
}
만약 다시 Console 출력을 해지하고 싶다면 다음과 같이 실행하면 됩니다.
var standardOutput = new StreamWriter(Console.OpenStandardOutput());
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);