编写在 C# 中单击消息框时单击 X 的代码



>我在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(...)方法可以实现的结果。

相关内容

  • 没有找到相关文章

最新更新