Привет, ребята. У меня возникают проблемы с использованием делегатов для записи в одно и то же событие, связанное с двумя формами (родительским и дочерним), это мой код:
public delegate void SplitDelegate(object s, ControllerEventArgs e);
public delegate void SetBatchDelegate(object s, ControllerEventArgs e);
public class ControllerEventArgs : EventArgs
{
public string sp1;
public int ip1;
public int ip2;
public ControllerEventArgs(string sp1)
{
this.sp1 = sp1;
}
public ControllerEventArgs(int p1, int p2)
{
this.ip1 = p1;
this.ip2 = p2;
}
public ControllerEventArgs(string sp1, int p1, int p2)
{
this.sp1 = sp1;
this.ip1 = p1;
this.ip2 = p2;
}
}
public interface IController
{
event SplitDelegate splitRowEvent;
event SetBatchDelegate setSmallBatchEvent;
void InvokeControllerEvent(string p1);
void InvokeControllerEvent(int p1, int p2);
void InvokeControllerEvent(string sp1, int p1, int p2);
}
public class Controller : IController
{
public event SplitDelegate splitRowEvent;
public event SetBatchDelegate setSmallBatchEvent;
public void InvokeControllerEvent(string p1)
{
this.OnControllerEvent(new ControllerEventArgs(p1));
}
public void InvokeControllerEvent(int p1, int p2)
{
this.OnControllerEvent(new ControllerEventArgs(p1, p2));
}
public void InvokeControllerEvent(string sp1, int p1, int p2)
{
this.OnControllerEvent(new ControllerEventArgs(sp1, p1, p2));
}
protected virtual void OnControllerEvent(ControllerEventArgs e)
{
if (this.splitRowEvent != null)
{
this.splitRowEvent.Invoke(this.splitRowEvent, e);
}
if (this.setSmallBatchEvent != null)
{
this.setSmallBatchEvent.Invoke(this.setSmallBatchEvent, e);
}
}
}
Например, когда я вызываю форму A:
frmFormB.controller.InvokeControllerEvent("ugPER");
Оба вызова обрабатываются, когда я просто хочу использовать первый SplitRowEvent
Есть ли способ переделать мой код, используя правильный синтаксис для получения правильного обратного вызова?
Добавлено для лучшего объяснения:
button1_click:
SmallBatchSplitSetRows frmModal = new SmallBatchSplitSetRows(this.controller);
frmModal.controller.InvokeControllerEvent("ugFAB");
frmModal.ShowDialog();
button2_click:
SmallBatchSplitInput frmModal = new SmallBatchSplitInput(this.controller);
frmModal.controller.InvokeControllerEvent("ugPER");
frmModal.ShowDialog();