-4

在我提出问题之前,我将创建一个场景。假设您有一个带有开始按钮的表单,然后当用户按下它时会弹出一个消息框,询问他们是否要继续,选项是是或否。当用户按否时,程序应该停止它的工作,返回表单并清除文本框/组合框/等。

现在这是我的问题,在选择“否”后,如何阻止程序进入进一步的代码?让代码停止它正在做的事情并像什么都没发生一样返回到表单?

我希望我能很好地解释自己...

没关系,我意识到我哪里出错了...避免了危机。感谢您的所有意见!

4

2 回答 2

2

通常,您将使用模态表单,这意味着您当前的方法被阻止并将被阻止,直到模态表单返回。

你可以尝试这样的事情:

        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

于 2013-08-13T18:48:09.583 回答
0

一般来说,.NET 使用协作取消模型,因此方法需要有一种机制来通知请求取消,并且它们需要显式取消自己。

这是由框架的许多部分通过CancellationTokenSource类和CancellationToken结构处理的。

有关完整详细信息,请参阅MSDN 上的托管线程中的取消。

话虽这么说,如果有问题的方法直接使用,如果结果是(在 Windows 窗体中)或未设置或为假(在 WPF 中)MessageBox,它可以返回或停止工作。DialogResult.NoWindow.DialogResult

于 2013-08-13T18:47:30.377 回答