У меня есть приложение WinForms, состоящее из нескольких форм.
Я пытаюсь передать обработчик событий из второй формы в третью, но я не могу этого добиться. Я получаю ошибку приведения, которую не могу понять, как ее преодолеть.
Я был бы признателен за помощь:
код + дальнейшее объяснение ниже:
Это грубое изображение того, что должно произойти:

Form1 может создавать несколько форм (она также содержит методы, которые я хочу передать) - которые я может успешно пройти создание подформы.
проблема начинается, когда я создаю форму3 из формы2: я пытаюсь передать обработчик событий, но получаю ошибку CS0029/CS0030 (ошибки приведения)
что я делаю неправильно и как это исправить?
РЕДАКТИРОВАТЬ:
что должно произойти? -- Форма3 должна управлять (отправлять данные обратно) элементу управления графическим интерфейсом, размещенному в Форме1.
Код:
Форма1:
Код: Выделить всё
public delegate void sendMessageToConsoleDelegate(string value);
public sendMessageToConsoleDelegate sendMessageToConsoleCallback;
public delegate void SetPlaceHolderDelegate(TextBox tb);
public SetPlaceHolderDelegate SetPlaceHolderCallback;
private void SetPlaceHolder(TextBox tb)
{
if (!tb.InvokeRequired)
{
if (!tb.Focused)
{
if (string.IsNullOrWhiteSpace(tb.Text))
tb.Text = tb.Tag.ToString();
return;
}
if (tb.Text == tb.Tag.ToString())
tb.Text = "";
return;
}
SetPlaceHolderDelegate call = new SetPlaceHolderDelegate(SetPlaceHolder);
tb.BeginInvoke(call, tb);
}
private void SendMessageToConsole(string msg)
{
if (!textBoxConsole.InvokeRequired)
{
textBoxConsole.AppendText(msg);
return;
}
sendMessageToConsoleDelegate call = new sendMessageToConsoleDelegate(SendMessageToConsole);
textBoxConsole.BeginInvoke(call, msg);
}
private void AddNewDeviceForm()
{
frmAddDevice add_device = new frmAddDevice(devicesDBPath);
add_device.sendMessageToConsole += SendMessageToConsole;
add_device.Show();
}
private void StartEdit()
{
frmEditDBs editdb = new frmEditDBs(devicesDBPath, commandsDBPath);
editdb.sendMessageToConsole += SendMessageToConsole;
editdb.SetPlaceHolder += SetPlaceHolder;
editdb.Show();
}
Код: Выделить всё
public delegate void EventHandler_sendMessageToConsole(string msg);
public event EventHandler_sendMessageToConsole sendMessageToConsole = delegate { };
public delegate void EventHandler_SetPlaceHolder(TextBox tb);
public event EventHandler_SetPlaceHolder SetPlaceHolder = delegate { };
private void EditDevice()
{
frmAddDevice edit_device = new frmAddDevice(devicesDBpath, current_device);
edit_device.sendMessageToConsole += sendMessageToConsole; ****
Подробнее здесь: [url]https://stackoverflow.com/questions/72446615/c-sharp-pass-delegates-to-different-forms[/url]