Передача функции из одной формы в другую (C#)

204
28 декабря 2017, 21:47

Столкнулся с данной проблемой при передачи функции из одной формы в другую. Как её решить?

Login:

private MainClient OnConnect;
private MainClient OnDataReceived;
private MainClient OnServerDisconnect;
public Login(MainClient OnConnect, MainClient OnDataReceived, MainClient OnServerDisconnect)
{
    InitializeComponent();
    this.OnConnect = OnConnect;
    this.OnDataReceived = OnDataReceived;
    this.OnServerDisconnect = OnServerDisconnect;
}
private void buttonLogin_Click(object sender, EventArgs e)
{
    ...
    MainClient._client = new Sock.Client { BufferSize = 1048576 };
    MainClient._client.OnConnect += OnConnect; //Problem
    MainClient._client.OnDataReceived += OnDataReceived; //Problem
    MainClient._client.OnServerDisconnect += OnServerDisconnect; //Problem
    ...
}

Main:

...
public static Sock.Client _client = new Sock.Client();
public static ClientInfo _clientInfo = new ClientInfo();
...
private void runLoginScreen()
{
    Application.Run(new Login(this, this, this));
}

Проблема Не удается неявно преобразовать тип "Project_Name.Main" в "Sock.Client.ServerDisconnectedEventHanlder". Помечена в коде как "Problem"

Answer 1

К событиям Sock.Client.OnConnect, Sock.Client.OnDataReceived и Sock.Client.OnServerDisconnect нужно подписывать методы с соответствующими сигнатурами, а не инстансы класса MainClient.

Посмотрите, как описано событие Sock.Client.OnConnect, какие у него параметры. Заведите в классе MainClient метод (название - неважно, например, ConnectHandler) с такими же параметрами. Тогда Вы сможете написать:

private MainClient mainClient;
public Login(MainClient aMainClient)
{
    InitializeComponent();
    this.mainClient = aMainClient;
}
private void buttonLogin_Click(object sender, EventArgs e)
{
    ...
    MainClient._client = new Sock.Client { BufferSize = 1048576 };
    MainClient._client.OnConnect += mainClient.ConnectHandler; //No problem
    ...

Аналогично - для OnDataReceived и OnServerDisconnect.

Только почему у Вас обработчики событий объекта, который принадлежит классу MainClient, назначает Login?

READ ALSO
Fluent-Ribbon: Отсутствуют картинки на контроллах в режиме конструктора

Fluent-Ribbon: Отсутствуют картинки на контроллах в режиме конструктора

Перешел на новый риббонПрикрепляю картинки на элементы интерфейса, но они отображаются только в запущенном приложении

190
C# Как запустить процесс в процессе?

C# Как запустить процесс в процессе?

Можно ли как-то в c# запустить процесс в процессе без создания нового процесса?

186
Отправить почту через .РФ домен

Отправить почту через .РФ домен

Для рассылки почты использовал достаточно простой метод отправки

223
Расшифровка POST запроса от Unity3d

Расшифровка POST запроса от Unity3d

Есть приложение на Unity, которое отправляет POST запрос серверу

242