假设代码:
MessageBox.Show(this,
"Would you like the differential girdle spring on the up-end of the grammeters?",
"Smi-Boloid Stater Slots",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
如果用户按转义,我希望它关闭消息框,Show()
方法可以返回DialogResult.None
。
相关问题:如何启用MessageBox.Show右上角的“X”让用户中止?
有点像Windows资源管理器确认对话框如何让您按下转义以中止。
有点像Internet Explorer确认对话框如何让您按rpm以中止。
有点像Outlook确认对话框如何让你按下转义来中止。
有点像宇宙历史中的每个对话框如何让用户按下转义,或者单击X,以便说:
“我不知道你是什么 问我,请不要打破我的 计算机“。
仅使用“是”和“否”按钮回答是或否问题。 主要指示应该是自然的 表达为是或否的问题。 是或否使用确定和取消 的问题。
答案 0 :(得分:12)
答案 1 :(得分:3)
我不相信这是可能的,虽然典型的等价物是使用取消指定其中一个 MessageBoxButtons 标志(在您的情况下特别是YesNoCancel)
使用此功能重新创建自己的MessageBox功能应该相当简单,如果你真的需要它,尽管取消可以完成这项工作。
答案 2 :(得分:1)
我怀疑如果你包含MessageBoxButtons.YesNoCancel,默认情况下Escape连接到cancel,它将返回一个取消的MessageBoxResult。
答案 3 :(得分:1)
除了其他答案之外,允许用户关闭带有转义的对话框可能是不好的做法,除非它显示“取消”按钮,因为这与用户期望从Windows应用程序的默认行为不同,并且它们可能变得不确定他们刚刚通过按下转义键采取了哪些动作。
如前所述,添加“取消”按钮将自动创建所需的效果。
答案 4 :(得分:1)
我认为MessageBox
(WinForms和WPF中的一个)是最佳重新定义的组件之一。它的行为非常严格,任何类型的重构都是不可能的。简而言之,滚动你自己 - 这样你可以让Escape关闭它,以及你可能需要的任何其他东西。
CodePlex上有一个名为InfoBox的项目可能对您有用。
答案 5 :(得分:1)
听起来像MessageBoxButtons.OkCancel就是你要找的东西,你只是挂断了这个问题与Ok / Cancel不匹配的事实。
理论上,您可以编写自己的MessageBox表单来执行相同的操作,并将No与Escape键关联起来,这样可以完成您想要的任务,并且需要额外的工作。另一种选择是重新解释您的问题,例如:
MessageBox.Show(this, "The following operation will format your computer.\r\nPress Ok to continue, Cancel to abort", "Confirm Format", MessageBoxButtons.OkCancel, MessageBoxIcon.Warning);
只是一个例子,但它可能是解决您困境的最简单方法。