在我提出问题之前,我将创建一个场景。假设您有一个带有开始按钮的表单,然后当用户按下它时会弹出一个消息框,询问他们是否要继续,选项是是或否。当用户按否时,程序应该停止它的工作,返回表单并清除文本框/组合框/等。
现在这是我的问题,在选择“否”后,如何阻止程序进入进一步的代码?让代码停止它正在做的事情并像什么都没发生一样返回到表单?
我希望我能很好地解释自己...
没关系,我意识到我哪里出错了...避免了危机。感谢您的所有意见!
在我提出问题之前,我将创建一个场景。假设您有一个带有开始按钮的表单,然后当用户按下它时会弹出一个消息框,询问他们是否要继续,选项是是或否。当用户按否时,程序应该停止它的工作,返回表单并清除文本框/组合框/等。
现在这是我的问题,在选择“否”后,如何阻止程序进入进一步的代码?让代码停止它正在做的事情并像什么都没发生一样返回到表单?
我希望我能很好地解释自己...
没关系,我意识到我哪里出错了...避免了危机。感谢您的所有意见!
通常,您将使用模态表单,这意味着您当前的方法被阻止并将被阻止,直到模态表单返回。
你可以尝试这样的事情:
DialogResult result = MessageBox.Show("Title", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
return;
如果您希望自定义表单显示为模态,您应该使用 ShowDialog() 而不是 Show(),ShowDialog 将阻止当前执行方法的执行,并将设置一个临时消息循环来处理窗口消息。
喜欢:
using(FormQuestion form = new FormQuestion())
{
DialogResult result = form.ShowDialog();
// check the result.
}
在此处查看更多信息:显示模态和无模态 Windows 窗体http://msdn.microsoft.com/en-us/library/aa984358(v=vs.71).aspx
一般来说,.NET 使用协作取消模型,因此方法需要有一种机制来通知请求取消,并且它们需要显式取消自己。
这是由框架的许多部分通过CancellationTokenSource
类和CancellationToken
结构处理的。
有关完整详细信息,请参阅MSDN 上的托管线程中的取消。
话虽这么说,如果有问题的方法直接使用,如果结果是(在 Windows 窗体中)或未设置或为假(在 WPF 中)MessageBox
,它可以返回或停止工作。DialogResult.No
Window.DialogResult