SaveFileDialog事件FileOk

meg*_*tar 2 .net c# winforms

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么事件FileOk不起作用?

Mik*_*oud 7

因为您需要调用之前挂起事件ShowDialog().当你调用ShowDialog()它时,停止在该线程上处理并等待响应.

所以,而不是这个:

Sdialog.ShowDialog();
Sdialog.FileOk += Sdialog_FileOk;
Run Code Online (Sandbox Code Playgroud)

做这个:

Sdialog.FileOk += Sdialog_FileOk;
Sdialog.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

要使用它DialogResult来简化您的工作流程,只需执行以下操作:

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

另外:而不是这样做:

StreamWriter FileProtocol =
    new StreamWriter(Sdialog.FileName);
FileProtocol.Write(textBox3.Text);
FileProtocol.Close();
Run Code Online (Sandbox Code Playgroud)

如何简化它:

File.AppendAllText(Sdialog.FileName, textBox3.Text);
Run Code Online (Sandbox Code Playgroud)

好处有两个:

  • 代码显然更简洁,并且;
  • 代码更安全,因为它可以适当地管理未管理的资源.