C# SaveFileDialog事件FileOk

C# SaveFileDialog事件FileOk,c#,.net,winforms,C#,.net,Winforms,为什么事件文件OK不起作用?因为在调用ShowDialog()之前需要将事件连接起来。调用ShowDialog()时,它会停止该线程上的处理,并等待响应 因此,与此相反: private void button2_Click(object sender, EventArgs e) { SaveFileDialog Sdialog = new SaveFileDialog(); Sdialog.ShowDialog(); Sdialog.FileOk +

为什么事件文件OK不起作用?

因为在调用
ShowDialog()
之前需要将事件连接起来。调用
ShowDialog()
时,它会停止该线程上的处理,并等待响应

因此,与此相反:

private void button2_Click(object sender, EventArgs e)
{        
    SaveFileDialog Sdialog = new SaveFileDialog();  
    Sdialog.ShowDialog();
    Sdialog.FileOk += Sdialog_FileOk;            
}

void Sdialog_FileOk(object sender, CancelEventArgs e)
{
    try
    {            
        StreamWriter FileProtocol = new StreamWriter(((SaveFileDialog)sender).FileName);
        FileProtocol.Write(textBox3.Text);
        FileProtocol.Close();
        MessageBox.Show("File is write ok");
    }
    catch (Exception)
    {
        MessageBox.Show("Unknown Error. File is not write");
    }
}
这样做:

Sdialog.ShowDialog();
Sdialog.FileOk += Sdialog_FileOk;

要使用
对话框result
简化您的工作流程,只需执行以下操作:

Sdialog.FileOk += Sdialog_FileOk;
Sdialog.ShowDialog();
另外:不要这样做:

if (Sdialog.ShowDialog() == DialogResult.OK)
{
    try
    {            
        StreamWriter FileProtocol =
            new StreamWriter(Sdialog.FileName);
        FileProtocol.Write(textBox3.Text);
        FileProtocol.Close();
        MessageBox.Show("File is write ok");
    }
    catch (Exception)
    {
        MessageBox.Show("Unknown Error. File is not write");
    }
}
把它简化成这样怎么样:

StreamWriter FileProtocol =
    new StreamWriter(Sdialog.FileName);
FileProtocol.Write(textBox3.Text);
FileProtocol.Close();
好处有两方面:

  • 代码显然要简洁得多,而且
  • 代码更安全,因为它可以为您适当地管理未管理的资源

但随后我在窗口顶部看到一条消息(MessageBox.Show(“文件已写入确定”);)来保存文件。@mega7star,这是因为该事件是在对话框仍处于打开(或关闭)状态时触发的。这里不需要
消息框
。只要做你的工作。另一方面,如果
ShowDialog
DialogResult
DialogResult,您只需从
SaveFileDialog
抓取
文件名即可。好的
@mega7star,请查看我的编辑,向您展示如何利用
ShowDialog()的结果。
File.AppendAllText(Sdialog.FileName, textBox3.Text);