我有一个窗体,在其他控件中,有一个TextBox字段,可以由用户选择填充。
还有一个btn提交按钮执行所需的操作并关闭窗体。
在其代码中,我检查是否存在评论,如果不是这样,请询问用户是否在退出之前填写它。
我使用bool AskToFillCommentIfNeeded()函数显示一个MessageBox,要求用户在退出之前可选地填充注释,如果这尚未完成。
如果用户回答是,则返回true,否则返回false。
如果用户点击是,我必须退出提交功能而不关闭表单,所以用户可以输入评论,然后再次按提交按钮。如何在表单为模态时退出函数而不退出表单?
的[编辑]代码是这样的:
private void btnSubmit_Click(object sender, EventArgs e)
{
// ask user if he wants to fill the comment : if so, exit this function
if (AskToFillCommentIfNeeded()) { return; };
// ... save data and exit form ...
}
我使用此代码在非模态形式,它按预期工作。
但是当我尝试在一个模式形式btnSubmit按钮DialogResult属性设置为OK使用它,它 不能按预期工作:
而不只是退出事件接收器,它会关闭形式 不保存数据。
我编了一个(笨拙)的解决方法,使用这样的布尔标志:
private bool isBusy = false;
private void btnSubmit_Click(object sender, EventArgs e)
{
// clumsy attempt to avoid form exit :
isBusy = true;
// ask user if he wants to fill the comment : if so, exit this function
if (AskToFillCommentIfNeeded()) { return; };
isBusy = false;
// ... save data and exit form ...
}
因此,如果执行return语句,我拦截_FormClosing事件 并取消它,如果设置了标志为true:
private void FDialog_FormClosing(object sender, FormClosingEventArgs e)
{
// abort closing if flag is set
e.Cancel = isBusy;
}
这样的工作,但它不尽人意。
有没有更好的方法来实现相同的行为?
我正在使用C#Express 2010。
预先感谢您。
杰克·格里芬
感谢您的及时答复。 – 2012-04-28 11:15:16
糟糕!错误的评论! – 2012-04-28 12:10:45
您可以删除评论。而且你不必感谢每一张海报。 – 2012-04-28 12:36:42