сохранение текстового файла в C # - PullRequest
1 голос
/ 06 марта 2012

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

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;
    }
}

Ответы [ 3 ]

4 голосов
/ 06 марта 2012

Вы проверяете свойство 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.

1 голос
/ 06 марта 2012
DialogResult res = saveFileDialog1.ShowDialog();
if (res == DialogResult.Cancel) {
    // user cancelled
}
else {
    // Write file to disk using the filename chosen by user
}
0 голосов
/ 06 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...