【发布时间】:2015-08-19 05:57:41
【问题描述】:
我正在使用以下代码:
Dim Reply As DialogResult = MessageBox.Show("GOT IT!")
If Reply = DialogResult.OK Then '...`
当我单击Close 按钮(角落中的红色“X”)时,寻找DialogResult.OK 的条件仍为真,当我在单击关闭按钮后在运行时检查Reply 变量的值时,它是@ 987654329@。
MessageBox Class 上的文档说:
显示消息窗口,也称为对话框,其中 向用户显示消息。它是一个模态窗口,挡住了其他 应用程序中的操作,直到用户关闭它。一个 MessageBox 可以 包含通知和指导用户的文本、按钮和符号。
虽然我发现DialogBoxes 上的文档有点令人费解和困惑,但在我看来(我可能错了)Close 按钮默认情况下应该将返回设置为IDCancel,我必须假设以某种方式被MessageBox 类解析为DialogReturn.Cancel。
那么为什么MessageBox 没有将关闭按钮的返回表单显示为DialogResult.Cancel??
这一切都让我很困惑,因为 MessageBox 类似乎与同一 Systems.Windows.Forms 命名空间中的其他形式不一致。
例如,如果我们查看Form Class's .DialogResult方法的文档,它明确告诉我们关闭按钮的返回是DialogResult.Cancel:
当表单显示为模式对话框时,单击关闭 按钮(表单右上角带有 X 的按钮) 导致表单被隐藏并设置 DialogResult 属性 到 DialogResult.Cancel。
【问题讨论】:
-
这不会按原样编译。你是说
Dim Reply = MessageBox.Show("GOT IT!")吗? -
只有在添加包含取消选项的 MessageBoxButtons 枚举时才能获得 IDCancel IE MessageBoxButtons.OKCancel
-
This is from the WinAPI version,不是真正可靠的证明参考,但有关返回值的部分讨论了取消按钮存在时的行为,然后反复试验确认此行为
-
如果您没有将取消指定为第三个参数的按钮选项之一,则 X 不会映射到您未指定的合法结果。红色“X”不会启用事件。您使用的表单 - 未指定按钮 - 与
OKOnly相同 -
如果你指定了像“Abort Retry Ignore”这样没有定义Cancel的按钮,它不会被启用。那个令人毛骨悚然的简短形式实际上并不是一个对话框,而是一个简单的消息框。更大的一点是,它不会返回您未指定为有效的值。
标签: vb.net forms messagebox