C# 用C语言保存文本文件#

C# 用C语言保存文本文件#,c#,visual-studio-2010,C#,Visual Studio 2010,我正在尝试写记事本,如何知道用户是否单击了“取消”?我的代码不起作用: private void SaveAsItem_Click(object sender, EventArgs e) { saveFileDialog1.FileName = "untitled"; saveFileDialog1.Filter = "Text (*.txt)|*.txt"; saveFileDialog1.ShowDialog(); System.IO.StreamWriter

我正在尝试写记事本,如何知道用户是否单击了“取消”?我的代码不起作用:

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

您正在检查主窗体的
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
包装在
中。如果发生异常,代码将无法关闭文件。使用
块是
try/finally
块的语法糖,该块在
finally
部分调用
Dispose()
(反过来调用
Close()
)。

您正在检查主窗体的
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
包装在
中。如果发生异常,代码将无法关闭文件。使用
块是
try/finally
块的语法糖,该块在
finally
部分调用
Dispose()
(反过来调用
Close()
)。

在检查对话框结果之前,您正在创建文件。将SaveFile变量位移到“issaved=true”块中


[编辑]如其他人所说,在检查对话框结果之前,请正确检查对话框结果。将SaveFile变量位移到“issaved=true”块中

DialogResult res = saveFileDialog1.ShowDialog();
if (res == DialogResult.Cancel) {
    // user cancelled
}
else {
    // Write file to disk using the filename chosen by user
}
[编辑]如其他人所说,正确检查对话框结果

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