Как изменить textbox формы из другого класса? Доброго времени суток. Мне необходимо изменять значение textbox из другого класса, смог разобраться как это делать с помощью данного видео. Единственная проблема в том, что я смог изменять значение textbox при нажатии кнопки. Вот небольшой пример:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Worker _worker;

public Form1()
{
InitializeComponent();

sendMessageButton.Click += Button1_Click;
}

private void Button1_Click(object sender, EventArgs e)
{
_worker = new Worker();

_worker.SendMessage += _worker_SendMessage1;

Thread thread = new Thread(_worker.Work);
thread.Start();

if (_worker != null)
_worker.SendMessageToTB();
}

private void _worker_SendMessage1(string mess)
{
ChatTextBox.Invoke((MethodInvoker)(() => ChatTextBox.Text += mess));
}
}

public class Worker
{
private string mess = "Кажется, ты что-то нажал...\r\n";
private bool _sendMessage = false;

public void SendMessageToTB()
{
_sendMessage = true;
}

public void Work()
{
if (_sendMessage)
{
SendMessage(mess);
_sendMessage = false;
}
}

public event Action SendMessage;
}
}
Для моей же программы нужно сделать так, чтобы значение текст бокса изменялось без всяких нажатий на кнопку. Суть в том, что как только серверу от пользователя приходит сообщение, он (сервер) должен это сообщение не только отправить всем остальным подключенным пользователям (за это отвечает метод server.BroadcastMessage), но и вывести в textbox своей формы. К сожалению сам так и не могу с этим разобраться, никак не выводится у меня текст в textbox.
Вот код программы.
Класс работы сервера:public class ClientObject
{
public event Action SendMessage;

internal string Id { get; private set; }
internal NetworkStream Stream { get; set; }
string userName;
TcpClient client;
ServerObject server;

public ClientObject() { }
public ClientObject(TcpClient tcpClient, ServerObject serverObject)
{
Id = Guid.NewGuid().ToString();
client = tcpClient;
server = serverObject;
server.AddConnection(this);
}

public void Process()
{
try
{
// Возвращаем объект NetWorkStream, используемый для отправки и получения данных
Stream = client.GetStream();

// Получаем имя пользователя
userName = GetMessage();
string message = userName + " вошел в чат.";
// Рассылаем сообщение о входе в чат всем подключенным пользователям
server.BroadcastMessage(message, Id); // отправляем сообщение всем подключенным пользователям
SendMessage(message); // Данный текст должен быть записан в textbox формы

// Получаем данные от пользователя
while (true)
{
try
{
message = GetMessage();
message = string.Format($"{userName}: {message}");
server.BroadcastMessage(message, Id);
SendMessage(message); // Данный текст должен быть записан в textbox формы
}
catch
{
message = userName + " покинул чат.";
server.BroadcastMessage(message, Id);
SendMessage(message); // Данный текст должен быть записан в textbox формы
break;
}
}
}
catch
{
//Когда-нибудь здесь что-то будет...
}
finally
{
// Удаляем пользователя из списка подключенных пользователей и закрываем поток с соединением
server.RemoveConnection(Id);
Close();
}
}
}
Класс формы:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
using System.Net;

namespace Server
{
public partial class Form1 : Form
{
static ServerObject server;
static Thread listenerThread;

private ClientObject cl = new ClientObject();

public Form1()
{
InitializeComponent();

cl.SendMessage += Cl_SendMessage; // Подписываемся на событие

try
{
server = new ServerObject();
listenerThread = new Thread(new ThreadStart(server.Listen));
listenerThread.Start(); // старт потока
}
catch (Exception exc)
{
server.Disconnect();
}
}

private void Cl_SendMessage(string mess)
{
chatLogTB.Invoke((MethodInvoker)(() => chatLogTB.Text += mess));
}
}
}
Очень надеюсь, что кто-нибудь поможет или подскажет как правильно реализовать то, что я хочу.

21 Авг 2019 в 07:03
259 +1
1
Ответы
Нет ответов
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 722 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир