目前开发项目中有如下需求:
A窗体的某个事件打开B窗体,B窗体的某个事件打开C窗体,现在在C窗体上的操作,需要将某个数据传递给A窗体,比如C窗体的MouseMove事件的坐标e.X,现在将其传给A窗体,如何操作呢?
一、首先,如果没有A窗体,需求为e.X传给B窗体,则关键代码如下:
C窗体中定义,委托和事件:
public delegate void OnMousePositionMoveDel(int X);
public OnMousePositionMoveDel OnMousePositionMoveEvent;
在C窗体的MouseMove事件中,触发该事件,并传递参数:OnMousePositionMoveEvent(e.X);
B窗体实例化C窗体的地方挂载C窗体事件:CForm frm=new CForm();
frm.OnMousePositionMoveEvent+=MouseMoveMethod;
B窗体中定义接受C窗体事件参数的方法private void MouseMoveMethod(int X)
{
//到此,C窗体的参数e.X已经通过参数X传递过来
}
二、现在设计到三个窗体,我的做法是
1、在B窗体中定义与C窗体类似的委托和事件:
public delegate void OnMousePositionMoveDel2(int X);
public OnMousePositionMoveDel2 OnMousePositionMoveEvent2;
2、B窗体实例化C窗体的地方挂载C窗体事件:CForm frm=new CForm();
frm.OnMousePositionMoveEvent+=MouseMoveMethod;
B窗体中定义接受C窗体事件参数的方法private void MouseMoveMethod(int X)
{
//这里继续触发事件,以便传给窗体A
OnMousePositionMoveEvent2(X);
}
3、A窗体实例化B窗体的地方挂载B窗体事件:BForm frm=new CForm();
frm.OnMousePositionMoveEvent2+=MouseMoveMethod;
A窗体中定义接受C窗体事件参数的方法private void MouseMoveMethod(int X)
{
//到此,C窗体的参数e.X已经通过参数X传递过来,其实是通过B窗体,再传递给A窗体的
}
三、不知道这种做法是否合适?或者是否为最佳实践,请大家赐教!

2万+

被折叠的 条评论
为什么被折叠?



