Есть программа которая сравнивает строки по дате. Необходимо чтобы в textBox отображался процесс работы программы, а именно выводились найденные строки. Нашел способ вывода через делегаты. Сделал следующим образом:
В классе Program объявил
public static readonly GpsEditor MEditor;
В классе формы добавил:
public delegate void TextBoxDelegate(string text);
public void MyTextBox(string input)
{
if (textBox1.InvokeRequired)
{
textBox1.Invoke(new TextBoxDelegate(MyTextBox), new object[] {input + "\n"});
}
else
{
textBox1.Text += input + "\n";
}
}
А в классе в котором находятся строки прописал так:
Program.MEditor.MyTextBox(Info.View);
В результате получаю:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Если в классе объявлю объект формы исключение не выйдет, но текстбокс так и не обновляется. Rак правильно передавать данные из класса в textBox?
Попробуйте так:
public void MyTextBox(string input)
{
if (InvokeRequired)
{
BeginInvoke(new TextBoxDelegate(MyTextBox), new object[] { input });
return;
}
textBox1.Text += input + "\n";
}
Но лучше конечно выводить многострочный текст в RichTextBox:
this.richTextBox1.SelectionStart = this.richTextBox1.TextLength;
this.richTextBox1.SelectionLength = 0;
this.richTextBox1.SelectionColor = Color.Black;
this.richTextBox1.AppendText((this.richTextBox1.TextLength > 0 ? "\r\n" : "") + input);
this.richTextBox1.SelectionColor = this.richTextBox1.ForeColor;
this.richTextBox1.ScrollToCaret();
Чтобы обратиться к форме, нужно её вызвать из списка открытых форм по её имени.
MEditor form = (MEditor) Application.OpenForms["MEditor"];
if (form != null)
form.MyTextBox(Info.View);
Напрямую при обращении к форме вы всегда получите ошибку!
Сборка персонального компьютера от Artline: умный выбор для современных пользователей