C# 区别于;否";及;取消“;MessageBox中的按钮

C# 区别于;否";及;取消“;MessageBox中的按钮,c#,messagebox,C#,Messagebox,我使用MessageBox来显示确认消息,当用户开始删除一个项目并最初使用MessageBox按钮时。YesNoCancel。后来我改为YesNo,因为一位用户指出在本例中“否”和“取消”并没有真正的区别。我的问题是…有什么区别?是否有理由使用YesNoCancel而不是YesNon?在您的情况下,没有区别,因为您的问题只会导致一个操作,然后完成 在标准用法中,Yes-No-Cancel通常会询问一个问题,Yes或No将选择一个不同的操作,然后继续执行另一个操作(如退出表单),Cancel将放弃

我使用MessageBox来显示确认消息,当用户开始删除一个项目并最初使用MessageBox按钮时。YesNoCancel。后来我改为YesNo,因为一位用户指出在本例中“否”和“取消”并没有真正的区别。我的问题是…有什么区别?是否有理由使用YesNoCancel而不是YesNon?

在您的情况下,没有区别,因为您的问题只会导致一个操作,然后完成

在标准用法中,Yes-No-Cancel通常会询问一个问题,Yes或No将选择一个不同的操作,然后继续执行另一个操作(如退出表单),Cancel将放弃所有操作

例如:退出Word,是否要保存?“是,不是,取消”。是和否将在保存或不保存的情况下继续退出,取消将不保存或退出

无论你做什么,都要确保Cancel做了用户最期望的事情——当我必须专注于其他事情时,如果受到消息框的轰炸,我将永远垃圾邮件取消。如果我取消了某件事,我不想因为没有时间停下来好好处理而损失很多工作


用户滥用取消:-)

当然可以。例如,如果存在“保存”对话框,而您输入的文件名已经存在,则该对话框可能会询问您是否要覆盖该文件

是意味着覆盖该文件。否可能意味着在文件名末尾附加“(1)”,或提示输入其他文件名。取消可能意味着根本不保存

您应该注意,
Yes
No
Cancel
都是不同的枚举,并且没有相同的值,因此您可以对它们进行不同的处理


请记住无论如何都要处理取消,因为如果用户单击对话框屏幕右上角的
x
按钮,
ShowDialog()
的结果是
DialogResult.CANCEL

下面是一个YesNoCancel合适的示例:

“是否要在退出前保存更改?”

  • 是-保存并退出
  • 否-不保存并退出
  • 取消-我在发生事故时按下了按钮,不要退出

我确信很容易想出一个场景,在这个场景中,“不”作为回应和“取消”之间会有明显的区别。传统上,“取消”应该在开始当前一系列操作之前将程序返回到其状态。“不”当然没有同样的规则

例如:

“是否要删除文件4/10?”
是:删除文件
否:不要删除该文件,请转到第5个文件(共10个)
取消:退出此操作并返回到未删除任何文件的状态

下面是一个例子:

假设您正在使用未保存的文件(如文字处理器)退出应用程序

退出时会显示一条确认信息:“您的文件有尚未保存的更改。是否保存这些更改?”

在这种情况下:

是=保存文件并退出

否=退出并丢失更改

Cancel=中止退出并返回应用程序

我猜“Cancel”用于中止整个操作。如果您正在处理一个庞大的过程,例如,将一组文件从一个目录移动到另一个目录,您可能需要向用户询问有关特定文件的一些信息,例如,确认用户是否确实想要移动受保护的文件。如果用户按“否”,则忽略该项并继续操作。如果用户按下“取消”,您将中止整个操作(并且可能回滚上一个操作)


当然,对于小程序或简单情况,“取消”和“否”没有区别。

可能更合适。从[c#]标记中,我假设您的目标是Windows操作系统。Microsoft对对话框(包括消息框)有一些详细的指导:。如果您正在为Windows设计用户界面,强烈建议阅读。我已在下面编辑了我的回复。请看我的找零。即使在YesNo对话框中,处理取消也很重要。