2
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");
    }
}

イベント FileOk が機能しないのはなぜですか?

4

1 に答える 1

8

を呼び出すにイベントをフックする必要があるためですShowDialog()。呼び出すShowDialog()と、そのスレッドでの処理を停止し、応答を待ちます。

したがって、これの代わりに:

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

これを行う:

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

を使用し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");
    }
}

また:これを行う代わりに:

StreamWriter FileProtocol =
    new StreamWriter(Sdialog.FileName);
FileProtocol.Write(textBox3.Text);
FileProtocol.Close();

これを単純化するのはどうですか:

File.AppendAllText(Sdialog.FileName, textBox3.Text);

利点は 2 つあります。

  • コードは明らかにはるかに簡潔です。
  • アンマネージ リソースが適切に管理されるため、コードはより安全です。
于 2013-10-07T18:50:27.137 に答える