事件与委托更新父窗体数据,简单比较
1.委托更新父窗页面。
例如,功能:父窗体A,子窗体B,由A打开B窗体,更新A窗体数据
A窗体代码:
public delegate void reflshPassenger();//声明委托
private void btnAddPassenger_Click(object sender, EventArgs e)//打开B窗体按钮,并把委托窗体给B窗体
{
reflshPassenger reflshData = getPassengers;
new FZ_Passengers("add", reflshData).ShowDialog();
}
private void getPassengers()
{
//...dosomething
}
B窗体代码:
A.reflshPassenger reflshpassenger; //声明A窗体委托
public FZ_Passengers(string _strState, formSubmitOrder.reflshPassenger _reflsh)
{
InitializeComponent();
strState = _strState;
reflshpassenger = _reflsh;//接受主窗体传递过来的委托
}
//最后在需要调用的位置,调用即可:
if(reflshpassenger!=null)
{
reflshpassenger()
}
2.基于事件:
窗体A代码:
B b;
注册事件:
B= new Frm_B();
B.eventLookUp += new EventHandler(frm_ValueChanged);//注册事件,要在ShowDialog之前实现
B.ShowDialog();
实现事件:
if (B.strName != "")
{
this.lb_Sub.Text = frm.strName.Trim();
}
else
{
return;
}
B窗体代码:
事件声明:
public event EventHandler eventLookUp;
public string strName { get; set; }//声明字符串
//在具体的位置实现事件
if (eventLookUp != null)
{
strName = dgv_DataSource.Rows[e.RowIndex].Cells["userName"].Value.ToString().Trim();
this.eventLookUp(sender, e);
this.Close();
}
总结,基于事件的实现方法,更简单,效率也高点,后期的维护性也高些!~