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

标签 c# messagebox dialogresult

我在 Visual Studio 2017 中用 C# 编写应用程序。我使用的是 Windows 窗体应用程序 (.NET Framework)。我弹出一个带有默认设置的消息框(只有“确定”按钮和右上角的“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 不提供指定关闭框如何单独工作的方法。单击“关闭”框(或按 Escape)总是返回“取消”按钮的 ID(如果有),或者返回默认按钮(如果没有)。

不幸的是,不,您不能尝试通过将默认按钮设置为不存在的按钮来进行作弊 - 如果您这样做,默认按钮将重置为现有按钮之一。

因此,如果您想以更复杂的方式处理“关闭”框,则必须创建自己的对话框,而不是让::MessageBox 为您做这件事。

关于c# - 在 C# 中编写当单击消息框上的 X 时的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59165403/

相关文章:

C# 计算重复数字

c# - 消息框关闭表单不正常

c# - 如何正确测试抽象类

c# - 在ASP.NET中运行的异常处理应用程序 block 异常处理程序无法调用Response.End()

c# - 如何在 Windows 窗体上动态绑定(bind)数据源到 ReportViewer C#

ASP.NET web 应用程序中的 Javascript 消息框

c# - 在 Entity Framework 中使用三元条件运算符或表达式

c# - WPF MessageBox 窗口样式

c# - 用于关闭对话框的用户控制按钮

c# - 关闭由 ShowDialog() 打开的表单