在我提出问题之前,我将创建一个场景。 假设你有一个带有开始按钮的表单,然后当用户按下它时会弹出一个消息框,询问他们是否要继续,选项是yes还是no。 当用户按下没有程序应该停止它做什么,返回表单并清除文本框/组合框/等。
现在这是我的问题,在选择“否”后如何停止程序进入更多代码?为了让代码停止它正在做什么并返回到表单,就像什么都没发生一样?
我希望我能够很好地解释自己......
没关系,我意识到我哪里出错了...危机避免了。感谢您的所有输入!
答案 0 :(得分:2)
通常你会使用一个模态形式,这意味着你的当前方法被阻止,并且在模态表格返回之前将被阻止。
您可以尝试这样的事情:
DialogResult result = MessageBox.Show("Title", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
return;
如果您希望自定义表单显示为模态,则应使用ShowDialog()而不是Show(),ShowDialog将阻止执行方法的当前执行,并将设置临时messageloop以处理窗口消息。
像:
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
答案 1 :(得分:0)
通常,.NET使用协作取消模型,因此方法需要有一种机制来通知请求取消,并且需要明确取消自己。
这由框架的许多部分通过CancellationTokenSource
类和CancellationToken
结构来处理。
有关详细信息,请参阅MSDN上的Cancellation in Managed Threads。
话虽如此,如果相关方法直接使用MessageBox
,如果结果为DialogResult.No
(在Windows窗体中)或Window.DialogResult
,则它可以返回或停止工作未设置或错误(在WPF中)。