C # Windows Forms: Сохранить и сохранить как горе - PullRequest
2 голосов
/ 08 июля 2011

Это действительно расстраивает меня. Я новичок в C Sharp, поэтому ищу некоторую помощь. Мой Сохранить / Сохранить как полностью fubar.

На самом деле два вопроса:

Как сохранить изменения в существующий файл, не открывая диалоговое окно сохранения? Если я нажимаю кнопку «Сохранить», появляется диалоговое окно, которое хорошо, поэтому я сохраняю его, затем вносим некоторые изменения и нажимаю «Сохранить» снова, оно открывает диалоговое окно, а не просто сохраняет файл с уже заданным именем.

Как мне показать имя файла, а не полный путь в диалоге сохранения? Отображается как имя файла: C: \ Users \ имя пользователя \ 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);
        }
    }

EDIT:

Спасибо, что так быстро помогли мне в этом! Мое сохранение теперь работает, как и ожидалось, однако оно привело к странной проблеме с «Сохранить как» (код выше).

Если я открою сохраненный файл (test.xml), а затем нажмите «Сохранить как» (назовите его test2.xml), он будет сохранен в новом файле. НО, когда я снова открою этот test.xml, внесу изменения и нажму «Сохранить», эти изменения сохранятся в test2.xml. Очень странно ... есть идеи?

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Где в коде установлено имя файла? Из примера, который вы опубликовали, я не вижу, чтобы он был установлен где-либо, но, возможно, это где-то еще. Это может работать:

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 голос
/ 08 июля 2011

1) Save dialog box просто возвращает путь к файлу, который пользователь хочет сохранить. Используя этот путь, вы можете выполнить функцию сохранения. Если вы хотите сохранить в текущий документ, просто пропустите диалоговое окно и выполните функцию сохранения с сохраненной в кэше версией выбранного пути.

Например, в вашей форме есть переменная:

string currentFilePath = "";

Когда пользователь впервые открывает диалоговое окно Сохранить, заполните эту переменную путем, выбранным пользователем. В следующий раз, когда пользователь сохранит (вместо save as), выполните проверку:

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

2) Вам нужно где-то установить FileName. Затем вы можете использовать Path.GetFileName на FileName, чтобы получить только имя и расширение.

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