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);
'C#, MONO' 카테고리의 다른 글
다른 폼으로 메시지 전송(3) (0) | 2021.08.09 |
---|---|
다른 폼으로 메시지 전송(2) (0) | 2021.08.09 |
다른 폼으로 메시지 전송(1) (0) | 2021.08.09 |
버튼 배열을 만들고, 마우스 클릭 이벤트 설정하기 (0) | 2021.08.09 |
Linux에서 MONO설치-시작 (0) | 2021.08.09 |