在 C# 中的消息框上单击 X 时编写代码
Write code for when the X is clicked on a message box in C#
我在 Visual Studio 2017 年用 C# 编写了一个应用程序。我正在使用 Windows Forms App (.NET Framework)。我有一个带有默认设置的 MessageBox 弹出(只有 OK 按钮和右上角的 X)。当用户选择 "OK" 时,剩余的代码将恢复。当用户选择 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)总是 returns 如果有取消按钮的 ID,如果没有则为默认按钮。
不幸的是,不,您不能通过将默认按钮设置为不存在的按钮来作弊 - 如果您这样做,默认值将被重置为现有按钮之一。
因此,如果您想以比这更复杂的方式处理关闭框,则必须创建自己的对话框,而不是让 ::MessageBox 为您完成。
除了关于WindowsAPI的回答。
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)
只是完整方法调用的shorthand版本。因此,您只能获得那些可以通过调用实际 .ShowCore(...)
方法获得的结果。
我在 Visual Studio 2017 年用 C# 编写了一个应用程序。我正在使用 Windows Forms App (.NET Framework)。我有一个带有默认设置的 MessageBox 弹出(只有 OK 按钮和右上角的 X)。当用户选择 "OK" 时,剩余的代码将恢复。当用户选择 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)总是 returns 如果有取消按钮的 ID,如果没有则为默认按钮。
不幸的是,不,您不能通过将默认按钮设置为不存在的按钮来作弊 - 如果您这样做,默认值将被重置为现有按钮之一。
因此,如果您想以比这更复杂的方式处理关闭框,则必须创建自己的对话框,而不是让 ::MessageBox 为您完成。
除了关于WindowsAPI的回答。
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)
只是完整方法调用的shorthand版本。因此,您只能获得那些可以通过调用实际 .ShowCore(...)
方法获得的结果。