读书人

一个窗体对应多个窗体的响应怎么办呢

发布时间: 2013-12-02 12:00:40 作者: rapoo

一个窗体对应多个窗体的响应怎么处理呢?




一个基础窗体A窗体(比如是产品信息查询窗体),多个父窗体(比如多个单据窗体)B-Z
当B窗体单击查询按钮就弹出A窗体,然后在A窗体里面查询产品并选择之后返回数据到B窗体(A回返回数据给调用他的父窗体) 这个该怎么实现呢 ,如果能有详细代码最好 多谢
============================================================
A与其他窗体是1对多的关系



[解决办法]
http://www.cnblogs.com/cosoft/archive/2011/08/08/2130659.html
[解决办法]
我的思路是 定义枚举 标记好 是 来自哪个窗体调用A的
这是我写的代码3个按钮调用一个窗体


/// <summary>
/// 弹出选择窗体事件
/// </summary>
/// <param name="sender"></param>
/// <param name="customsInspectionControl"></param>
public static void BtnSelectClick(object sender, CustomsInspectionControl customsInspectionControl)
{
Button btn = sender as Button;
SelectType st = new SelectType();

switch (btn.Name)
{
case "BtnSuoXuDanZheng":
st.BtnSelectType = BtnType.BtnSuoXuDanZheng;
st.ListSuoXuDanZheng = customsInspectionControl.RequiredDocuments[1].Text;
break;
case "btnSuiFuDanJu":
st.BtnSelectType = BtnType.BtnSuiFuDanJu;
st.ListSuiFuDanJu = customsInspectionControl.AccompanyingDocuments[1].Text;
break;
case "BtnShenPi":
st.BtnSelectType = BtnType.BtnShenPi;
st.ListShenPi = customsInspectionControl.ShenPi[1].Text;
break;
}
if (st.ShowDialog() == DialogResult.OK)
{
if (st.BtnSelectType == BtnType.BtnShenPi)
{
customsInspectionControl.ShenPi[1].Text = st.ListShenPi;
}
else if (st.BtnSelectType == BtnType.BtnSuiFuDanJu)
{
customsInspectionControl.AccompanyingDocuments[1].Text = st.ListSuiFuDanJu;
}
else if (st.BtnSelectType == BtnType.BtnSuoXuDanZheng)


{
customsInspectionControl.RequiredDocuments[1].Text = st.ListSuoXuDanZheng;
}
}
}


当然这仅仅是窗体中互相传值而已
[解决办法]
B-Z每次点击后都是new出A的吗?如果new出A的话直接窗体传值就解决啦
如果A一直存在的话 B-Z是同一类型窗体吗?
如果是的话直接在A中保存开启他的窗体的引用
如果不是的话 在A中定义事件解决吧
[解决办法]
在弹出窗体A之间,设置A的Owner为要弹出他的父窗体,这样在A窗体里面可以直接通过A的Owner得到父窗体,并针对父窗体进行对应操作。
[解决办法]
这不就是窗体间传值么?
用委托吧,给A窗体定义个事件,A窗体只负责查询,查询出结果后由其他订阅了该事件的窗体去处理。
public delegate void OnFindResultSuccess(object findResult);

formA:
public event OnFindResultSuccess FindResultSuccess;
btnFind_click事件: FindResultSuccess(result);

formB:
formA f = new formA()
f.FindResultSuccess += delegate(object findResult)
{
text.text = findResult.xxxx;
}

formC~formZ一样。。。

读书人网 >C#

热点推荐