Пользовательский текстовый редактор для выходного потока консоли не работает во внешних классах - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь переслать вывод 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 Ответ

0 голосов
/ 05 февраля 2019

Как я выяснил после эксперимента, у этой проблемы была другая причина, чем я ожидал.В моей программе я использовал Console.Clear(), чтобы удалить все напечатанные строки, но, очевидно, это также уничтожает ссылку на поток вывода пользовательского набора.

И это, в конце концов, не очистит TextBox, я должен использовать TextBox.Clear().

Я прошу прощения за это, потому что мой вопрос не к сути в этом случае, проблема, казалось, лежит где-то еще.На самом деле, код в моем вопросе работает отлично, потому что нет вызова Console.Clear(), но я просто не выяснил, что на самом деле вызвало проблему.

Реальный вопрос был бы: как"переопределить" Console.Clear() для очистки TextBox?Но это для другой темы.

...