C# 在C中的保存对话框上显示messagebox#

C# 在C中的保存对话框上显示messagebox#,c#,winforms,C#,Winforms,如何在保存对话框上单击“取消”后在保存对话框上显示消息框,即保存对话框应显示在背景上。使用SaveFileDialog类无法实现此目的。我必须再次使用lubos。无法使用SaveFileDialog类完成此操作 基本上,您要做的是在SaveFileDialog上捕获一个特定的按钮单击事件,该类不向您提供该事件。如果您真的需要这种功能,一个解决方案是滚动您自己的“保存”对话框,以便您可以按自己的方式处理每个按钮。据我所知,您无法使用“保存文件”对话框在纯.Net中完成所需的操作。如果您转到Wind

如何在保存对话框上单击“取消”后在保存对话框上显示消息框,即保存对话框应显示在背景上。

使用
SaveFileDialog
类无法实现此目的。

我必须再次使用lubos。无法使用SaveFileDialog类完成此操作


基本上,您要做的是在SaveFileDialog上捕获一个特定的按钮单击事件,该类不向您提供该事件。如果您真的需要这种功能,一个解决方案是滚动您自己的“保存”对话框,以便您可以按自己的方式处理每个按钮。

据我所知,您无法使用“保存文件”对话框在纯.Net中完成所需的操作。如果您转到Windows并监听实际的Windows消息并响应click事件消息等,您可能可以完成此任务。我宁愿避免这样做


您可以寻找第三方对话类,或者编写自己的对话类。

一般来说,制作一个与文件系统交互的用户界面与大多数其他Windows程序的工作方式不同的程序不是一个好主意。这就是为什么没有简单的方法来实现这一点。

您可以通过一些修改来实现:

SaveFileDialog savefileDialog1 = new SaveFileDialog();
DialogResult result  = savefileDialog1.ShowDialog();
switch(result == DialogResult.OK)
    case true:
        //do something
    case false:
        MessageBox.Show("are you sure?","",MessageBoxButtons.YesNo,MessageBoxIcon.Question);

如果需要取消“文件保存”对话框时显示消息框的原因是因为您正在关闭带有未保存更改的内容,那么我建议将对“文件保存”对话框的调用放入一个循环中,该循环将一直进行,直到设置了停止循环的标志,如果结果不确定,则调用消息框。例如:

    private void Form1_Load(object sender, EventArgs e)
    {
        DialogResult result = showDialog();
        if (result == DialogResult.OK)
        {
            //Ok
        }
        else
        {
            DialogResult r = MessageBox.Show("Are you sure?", "Sure?", MessageBoxButtons.YesNo);
            if(r.ToString()=="No")
            {
                showDialog();
            }
        }
    }

    public DialogResult showDialog()
    {
        SaveFileDialog savefileDialog1 = new SaveFileDialog();
        DialogResult result = savefileDialog1.ShowDialog();
        return result;
    }

这样,“文件保存”对话框的行为与其他Windows应用程序中的行为一致,如果用户在“文件保存”对话框中意外点击“取消”,您可以让用户再次尝试保存文件。

顺便说一句,有一种更有效的方式显示和检查对话框。像这样:

// lead-up code

SaveFileDialog sft = new SaveFileDialog();
BOOL bDone;
do
{
  if (DialogResult.OK == sft.ShowDialog())
    bDone = true;
  else
  {
    DialogResult result = MessageBox.Show("Are you sure you don't want to save the changed file?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    bDone = (result == Yes) ? true : false;
  }
} while (!bDone);

// carry on

根据定义,“结果”告诉您对话框关闭时发生了什么事件。如果您尝试在“OK”上进行注入,您会看到相同的行为。保持SaveFileDialog可见的令人信服的原因是什么?这是平台的非典型行为,我希望它会让用户感到困惑。如果要确认覆盖,则通过SaveFileDialog本身的属性完成。
SaveFileDialog saveFileDialog1 = new SaveFileDialog();

if( saveFileDialog1.ShowDialog() == DialogResult.OK )
{
   // Code here...
} else Application.DoEvents();