>我在Visual Studio 2017中用C#编写应用程序。我正在使用Windows Forms App(.NET Framework(。我有一个带有默认设置的 MessageBox 弹出窗口(只有右上角的 OK 按钮和 X(。当用户选择"确定"时,剩余代码将恢复。我想编写单独的代码,以便在用户选择 X 关闭消息框时运行。如何判断用户是否已单击 X 关闭消息框?
我试过使用
DialogResult result = MessageBox.Show("Message here");
if(result != DialogResult.OK){
//Do stuff here
}
但即使按下 X,结果仍然以 Dialog.OK 的形式返回。
我该怎么办?
更新
此代码工作正常
DialogResult result = MessageBox.Show("Message here", "MessageBoxTitle", MessageBoxButtons.OKCancel);
if(result != DialogResult.OK){
//Do stuff here
}
但是,我的消息框现在有一个不必要的"取消"按钮。有没有办法仅通过 MessageBoxButtons.OK 设置来实现此目的,以便避免使用"取消"按钮?
这是基础 Win32 MessageBox API 的限制。
API 不提供指定"关闭"框如何单独工作的方法。单击"关闭"框(或按 Esc 键(始终返回"取消"按钮的 ID(如果有(或默认按钮(如果没有(。
不幸的是,不,你不能通过将默认按钮设置为不存在的按钮来尝试作弊——如果你这样做,默认值将被重置为现有按钮之一。
因此,如果要以更复杂的方式处理"关闭"框,则必须创建自己的对话框,而不是让 ::MessageBox 为您执行此操作。
除了关于Windows API的答案。
System.Windows.Forms.MessageBox.Show("Message")
内部调用私有方法System.Windows.Forms.ShowCore(...)
。
方法.Show(text)
以这种方式定义:
/// <summary>
/// Displays a message box with specified text.
/// </summary>
public static DialogResult Show(string text)
{
return ShowCore(null, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0, false);
}
这意味着.Show(text)
只是完整方法调用的简写版本。因此,只能实现通过调用实际.ShowCore(...)
方法可以实现的结果。