2012-07-11 144 views
0

我已到處尋找,找不到我正在尋找的東西。我要的是代號爲saveToolStripMenuItem_Click事件處理程序的「保存」菜單上(而不是「另存爲...」),並有我的應用程序檢查,看是否:保存沒有對話框的文件

  1. 目前文件已保存,因此已經有一個文件名。

  2. 當前文件自打開以來已被修改。

  3. 覆蓋(或追加,根據需要)現有的文件,而不會彈出「另存爲」對話框。

  4. 如果該文件尚不存在,則顯示「另存爲...」菜單。

我的「另存爲...」菜單已正常工作。我發現的一切都告訴我如何創建一個「另存爲...」對話框,我已經知道了。我下載的每個示例程序都沒有這個功能。

任何幫助,將不勝感激。

+0

任何代碼?你能告訴我們你做過什麼/嘗試過嗎? – 2012-07-11 09:04:31

回答

1

點1實現爲點中提到的要求是你的解決方案,真的。

您必須保留一個Filename字符串變量,該變量包含當前文檔的文件名。如果您創建一個新文檔,Filenamenull。然後,如果您單擊SaveSave As...並且用戶不取消對話框,則將結果FileDialog.FileName存儲在您的Filename變量中,然後寫入文件內容。

現在,如果用戶再次單擊Save,您會檢查Filename是否有值,如果不是,請不要顯示SaveFileDialog,而只需再次寫入該文件。然後

您的代碼將是這個樣子:

private String _filename; 

void saveToolStripMenuItem_Click() 
{ 
    if (String.IsNullOrEmpty(_filename)) 
    { 
     if (ShowSaveDialog() != DialogResult.OK) 
     { 
      return; 
     } 
    } 

    SaveCurrentFile(); 
} 

void saveAsToolStripMenuItem_Click() 
{ 
    if (ShowSaveDialog() != DialogResult.OK) 
    { 
     return; 
    } 

    SaveCurrentFile(); 
} 

DialogResult ShowSaveDialog() 
{ 
    var dialog = new SaveFileDialog(); 
    // set your path, filter, title, whatever 
    var result = dialog.ShowDialog(); 

    if (result == DialogResult.OK) 
    { 
     _filename = result.FileName; 
    } 

    return result; 
} 

void SaveCurrentFile() 
{ 
    using (var writer = new StreamWriter(_filename)) 
    { 
     // write your file 
    } 
}