2012-03-05 4 views
1

Я пытаюсь написать блокнот, как узнать, нажал ли пользователь «Отменить»? Мой код не работает:сохранение текстового файла в C#

private void SaveAsItem_Click(object sender, EventArgs e) 
{ 
    saveFileDialog1.FileName = "untitled"; 
    saveFileDialog1.Filter = "Text (*.txt)|*.txt"; 
    saveFileDialog1.ShowDialog(); 
    System.IO.StreamWriter SaveFile = new System.IO.StreamWriter(saveFileDialog1.FileName); 
    SaveFile.WriteLine(richTextBox1.Text); 
    SaveFile.Close(); 
    if (DialogResult == DialogResult.Cancel) 
    { 
     richTextBox1.Text = "CANCEL"; 
     issaved = false; 
    } 
    else 
    { 
     issaved = true; 
    } 
} 

ответ

4

Вы проверки DialogResult свойства для основной формы, но это форма ребенка, который вы хотите проверить. Так что ...

var dr = saveFileDialog1.ShowDialog(); 
if(dr == DialogResult.OK) 
{ 
    using(var SaveFile = new StreamWriter(saveFileDialog1.FileName)) 
    { 
     SaveFile.WriteLine(richTextBox1.Text); 
     issaved = true; 
    } 
} 
else // cancel (or something else) 
{ 
    richTextBox1.Text = "CANCEL"; 
    issaved = false;  
} 

Кроме того, вы должны обернуть StreamWriter в using блоке, как я сделал выше. При возникновении исключения ваш код не сможет закрыть файл. Блок using представляет собой синтаксический сахар для блока try/finally, который вызывает Dispose() (который, в свою очередь, вызывает Close()) в части finally.

0

Вы создаете файл перед проверкой результата диалога. Переместите бит переменной SaveFile в блок «issaved = true».

[править] И как другие говорили, проверьте Dialog результат правильно

1
DialogResult res = saveFileDialog1.ShowDialog(); 
if (res == DialogResult.Cancel) { 
    // user cancelled 
} 
else { 
    // Write file to disk using the filename chosen by user 
}