2013-10-07 30 views
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不起作用?SaveFileDialog事件FileOk

回答

4

因爲您需要掛鉤事件之前致電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"); 
    } 
} 

ALSO:中而不是做這樣的:

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

怎麼樣簡化爲這樣:

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

的好處是雙重的:

  • 代碼顯然更加簡潔,和;
  • 代碼更安全,因爲它可以爲您適當地管理未管理的資源。
+0

但是後來我在窗口頂部看到一條消息(MessageBox.Show(「File is write ok」);))以保存文件。 – mega7star

+0

@ mega7star,那是因爲在對話框仍然打開(或關閉)的時候觸發了該事件。你不需要在那裏有一個'MessageBox'。你是否工作?另一方面,如果'ShowDialog'的DialogResult是'DialogResult.OK',則可以簡單地從'SaveFileDialog'中抓取'FileName'。 –

+0

@ mega7star,請參閱我的編輯,向您展示如何利用ShowDialog()的結果。 –