C#Windows窗体:保存&拯救困境

时间:2011-07-07 22:04:10

标签: c# windows winforms

这真让我很沮丧。我是C Sharp的新手,所以寻求一些帮助。我的保存/另存为完全是fubar。

真的有两个问题:

如何在不弹出保存对话框的情况下保存对现有文件的更改?如果我单击“保存”,则会弹出一个对话框,这样就可以保存,然后进行一些更改并再次单击“保存”,弹出一个对话框,而不是仅仅将文件保存到已经给出的名称。

如何在另存为对话框中显示文件名而不是完整路径?它显示为文件名:C:\ Users \ username \ desktop \ save \ filename.xml

这是在MainForm.cs。

private void biFileSave_Click(object sender, EventArgs e)
    {
        // Save diagram
        EditorForm editForm = this.ActiveDiagramForm;
        if (editForm != null)
        {
            if (!editForm.HasFileName)
            {
                if (this.saveEditorDialog.ShowDialog(this) == DialogResult.OK)
                {
                    this.ActiveDiagram.SaveSoap(this.saveEditorDialog.FileName);
                }
            }
            else
            {
                this.ActiveDiagram.SaveSoap(this.saveEditorDialog.FileName);
            }
        }

private void biFileSaveAs_Click(object sender, EventArgs e)
    {
        // Save As diagram
        EditorForm editForm = this.ActiveDiagramForm;
        if (editForm != null)
        {
            if (editForm.HasFileName)
            {
                this.saveEditorDialog.FileName = editForm.FileName;
            }
            if (this.saveEditorDialog.ShowDialog(this) == DialogResult.OK)
            {
                this.ActiveDiagram.SaveSoap(this.saveEditorDialog.FileName);
                string strFileName = this.saveEditorDialog.FileName;

            }

        }
    }

这是在EditForm.cs

 public string FileName
    {
        get
        {
            return this.fileName;
        }
        set
        {
            this.fileName = value;
            this.Text = Path.GetFileNameWithoutExtension(this.fileName);
        }
    }

    public bool HasFileName
    {
        get
        {
            return (this.fileName != null && this.fileName.Length > 0);
        }
    }

编辑:

感谢您如此迅速地帮助我!我的Save现在按预期工作,但是它引入了一个奇怪的问题,即Save As(上面的代码)。

如果我打开已保存的文件(test.xml),则单击“另存为”(将其命名为test2.xml),将其保存到新文件中。但是,当我再次打开test.xml并进行更改并单击“保存”时,将这些更改保存到test2.xml。很奇怪......有什么想法吗?

2 个答案:

答案 0 :(得分:2)

代码中的哪个位置设置了FileName?从您发布的样本中,我没有看到它被设置在任何地方,但也许它在其他地方。这可能有效:

private void biFileSave_Click(object sender, EventArgs e)
    {
        // Save diagram
        EditorForm editForm = this.ActiveDiagramForm;
        if (editForm != null)
        {
            if (!editForm.HasFileName)
            {
                if (this.saveEditorDialog.ShowDialog(this) == DialogResult.OK)
                {
                    this.ActiveDiagram.SaveSoap(this.saveEditorDialog.FileName);
                    editForm.FileName = this.saveEditorDialog.FileName;
                }
            }
            else
            {
                this.ActiveDiagram.SaveSoap(this.saveEditorDialog.FileName);
            }
        }

答案 1 :(得分:1)

1)保存dialog box将只返回用户希望保存的文件路径。使用此路径,您可以执行保存功能。如果要保存到当前文档,只需跳过对话框并使用所选路径的缓存版本执行保存功能。

例如,在您的表单中,有一个变量:

string currentFilePath = "";

当用户首次打开“保存”对话框时,请使用用户选择的路径填充该变量。 下次用户保存(而不是save as)时,请执行检查:

if(!String.IsNullOrEmpty(currentFilePath))
   //save method using currentFilePath as the path to save to

2)您需要在某处设置FileName。然后,您可以使用FileName上的Path.GetFileName来获取名称和扩展名。