假设代码:
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);
如果用户按下Escape,我希望它关闭消息框,Show()
方法可以返回DialogResult.None
。
相关问题:如何启用MessageBox.Show右上角的“X”让用户中止?
有点像Windows资源管理器确认对话框如何让您按下转义中止。
有点像Internet Explorer确认对话框如何让您按下escape以中止。
有点像Outlook确认对话框如何让您按下转义中止。
有点像宇宙历史中的每个对话框都让用户按下转义,或点击X,以便说:
“我不知道你在问我什么,请不要破坏我的电脑。”
使用“是”和“否”按钮仅回答是或否问题。主要指示应自然地表达为是或否问题。对于是或否问题,切勿使用“确定”和“取消”。
我不相信这是可能的,虽然典型的等价物是指定一个带有取消的MessageBoxButtons标志(在你的情况下特别是YesNoCancel)。
使用此功能重新创建自己的MessageBox函数应该相当简单,如果你真的想要它,尽管真的取消了。
我怀疑如果你包含MessageBoxButtons.YesNoCancel,默认情况下Escape连接到cancel,它将返回CancelBox的MessageBoxResult。
除了其他答案之外,允许用户使用escape关闭对话框可能是不好的做法,除非它显示“取消”按钮,因为这与用户期望从Windows应用程序的默认行为不同,并且他们可能不确定哪个动作他们只是按下退出键。
如前所述,添加“取消”按钮将自动创建所需的效果。
我认为MessageBox
(WinForms和WPF中的那个)是最好重新定义的组件之一。它的行为非常严格,任何类型的重构都是不可能的。简而言之,滚动你自己 - 这样你可以让Escape关闭它,以及你可能需要的任何其他东西。
CodePlex上有一个名为InfoBox的项目可能对您有用。
听起来像MessageBoxButtons.OkCancel就是你要找的东西,你只是挂断了这个问题与Ok / Cancel不匹配的事实。
理论上,您可以编写自己的MessageBox表单来执行相同的操作,并将“否”与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);
举个例子,但它可能是解决您困境的最简单方法。