Пользовательский текстовый редактор для выходного потока консоли не работает во внешних классах
Я пытаюсь переслать Console
вывод в Windows Forms TextBox
контроль. Поэтому я прикрепил кастом TextWriter
к Console
который добавляет вывод к TextBox
,
Но я думаю, что TextWriter
или же TextBox
недоступен изнутри внешнего класса. Как это исправить? Проверьте мой код ниже:
partial class Form1 : Form
{
public StringWriter _TextWriter;
public Form1()
{
InitializeComponent();
this._TextWriter = new TextBoxStreamWriter(this.textBox1);
Console.SetOut(this._TextWriter);
Console.WriteLine("This text does appear in the TextBox, works perfect.");
Test ConsoleOutputExternalClass = new Test();
}
}
public class TextBoxStreamWriter : StringWriter
{
TextBox _output = null;
public TextBoxStreamWriter(TextBox output)
{
this._output = output;
}
public override void WriteLine(string value)
{
base.WriteLine(value);
this._output.AppendText(value.ToString());
}
public override Encoding Encoding
{
get
{
return Encoding.UTF8;
}
}
}
private class Test
{
public Test()
{
// HERE I GET AN EXCEPTION ERROR !!
Console.WriteLine("System.IO.IOException: 'The handle is invalid.'");
}
}
1 ответ
Как я выяснил после экспериментов, у этой проблемы была другая причина, чем я ожидал. В моей программе я использовал Console.Clear()
удалить все напечатанные строки, но, по-видимому, это также уничтожает ссылку на поток вывода пользовательского набора.
И это не очистит TextBox в конце концов, я должен использовать TextBox.Clear()
,
Я прошу прощения за это, потому что мой вопрос не к сути в этом случае, проблема, казалось, лежит где-то еще. На самом деле, код в моем вопросе работает отлично, потому что нет вызова Console.Clear()
, но я просто еще не выяснил, что на самом деле вызвало проблему.
Реальный вопрос будет: как "переопределить" Console.Clear()
чтобы очистить TextBox? Но это для другой темы.