当我们做机房重构的时候,或许会碰到这样的问题?操作某一窗体的时候,想要通知另外一个窗体我采取了什么操作,那么我们该怎么办?委托还是事件,这里好像有些大材小用,下篇博客将会介绍这种操作。
思考:想要告诉另外一个窗体根据本窗体的操作来执行不同的代码(过程),那么我只要给另外一个窗体不同的返回值就可以解决这个问题了。
模态窗口作用:
1:解决附带窗体不关闭,主窗体无法进行其它操作;
2:通过操作附带窗体,返回相应的值(OK或Cancel),然后在主窗体中进行相应的判断(执行不同的代码);
实践操作范例:
目的:弹出“学生类型管理”窗体后进行学生类型的各种操作,然后给“学生信息管理”窗体返回(Ok或者False),以便判断执行不同的代码
- 学生类型管理窗体
//学生类型管理窗体的删除按钮,以便删除后及时在学生信息管理窗体中更新,因此需要返回值。
private void btnDelete_Click(object sender, EventArgs e)
{
var rows = dgvList.SelectedRows[0];
int id = Convert.ToInt32(rows.Cells[0].Value);
DialogResult result = MessageBox.Show("确定要删除吗?", "提示", MessageBoxButtons.OKCancel);
if (result==DialogResult.Cancel)
{
return;
}
if (stiFacade.Remove(id))//学生类型表中删除数据
{
LoadList();//重新加载列表
}
else
{
MessageBox.Show("删除失败,请稍后重试");
}
result = DialogResult.OK;
}
//关闭学生类型管理窗体的触发事件
private void FormStudentTypeInfo_FormClosing(object sender, FormClosingEventArgs e)
{
_form = null;//单利代码
this.DialogResult = result;//模态窗体代码
}
- 学生信息管理窗体
//学生信息管理窗体的“类型管理”按钮单击事件
private void btnTypeManage_Click(object sender, EventArgs e)
{
FormStudentTypeInfo formSti =FormStudentTypeInfo.Create();//实例化学生类型窗体
DialogResult result = formSti.ShowDialog();//接收从学生类型窗体返回值
if (result==DialogResult.OK)//逻辑判断
{
LoadList();//重新加载学生信息数据
LoadTypeList();//重新加载学生类型数据
}
}
以上就是模态窗口的使用过程,只要符合上面作用中的一条就可以加以应用,效果还不错;