大家好,我遇到了一些麻烦,使用委托代表相同的事件,有两种形式(父母和孩子),这是我的代码:
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();
答案 0 :(得分:2)
您的OnControllerEvent
方法显式调用使用splitRowEvent
和setSmallBatchEvent
。如果您不想要它,只需更改方法的内容。
最终,不清楚为什么你有两个不同的事件,但只有一种方式通过三个重载来调用它们。这三个重载是否意味着做不同的事情?每个人都打算调用一组不同的事件处理程序吗?这是使用描述性名称而不是重载的地方真的很有用。