2013-07-15 2 views
1
public partial class Form1 : Form 
{ 
    SaveFileDialog sfd = new SaveFileDialog(); 
    OpenFileDialog ofd = new OpenFileDialog(); 
    public string contents = string.Empty; 
    public Form1() 
    { 
     InitializeComponent(); 
     this.Text = "Untitled"; 
    } 

    private void newToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (richTextBox1.Text != contents) 
     { 
      DialogResult dr = MessageBox.Show("Do You want to save the changes made to " + this.Text, "Save", MessageBoxButtons.YesNoCancel); 
      if (dr == DialogResult.Yes) 
      { 
       sfd.Title = "Save"; 
       if (SaveFile() == 0) 
        return; 
       else 
       { 
        richTextBox1.Text = ""; 
        this.Text = "Untitled"; 
       } 
       contents = ""; 
      } 
      else if (dr == DialogResult.No) 
      { 
       richTextBox1.Text = ""; 
       this.Text = "Untitled"; 
       contents = ""; 
      } 
      else 
      { 
       richTextBox1.Focus(); 
      } 
     } 
     else 
     { 
      this.Text = "Untitled"; 
      richTextBox1.Text = ""; 
      contents = ""; 
     } 

    } 
    private int SaveFile() 
    { 
     sfd.Filter = "Text Documents|*.txt"; 
     sfd.DefaultExt = "txt"; 
     if (sfd.ShowDialog() == DialogResult.Cancel) 
     { 
      richTextBox1.Focus(); 
      return 0; 
     } 
     else 
     { 
      contents = richTextBox1.Text; 
      if (this.Text == "Untitled") 
       richTextBox1.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText); 
      else 
      { 
       sfd.FileName = this.Text; 
       richTextBox1.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText); 
      } 
      this.Text = sfd.FileName; 
      return 1; 
     } 


    } 
    private void OpenFile() 
    { 
     ofd.Filter = "Text Documents|*.txt"; 
     if (ofd.ShowDialog() == DialogResult.Cancel) 
      richTextBox1.Focus(); 
     else 
     { 
      richTextBox1.LoadFile(ofd.FileName, RichTextBoxStreamType.PlainText); 
      this.Text = ofd.FileName; 
      contents = richTextBox1.Text; 
     } 
    } 

    private void openToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (richTextBox1.Text != contents) 
     { 
      DialogResult dr = MessageBox.Show("Do You want to save the changes made to " + this.Text, "Save", MessageBoxButtons.YesNoCancel); 
      if (dr == DialogResult.Yes) 
      { 
       SaveFile(); 
       OpenFile(); 
      } 
      else if (dr == DialogResult.No) 
      { 
       OpenFile(); 
      } 
      else 
      { 
       richTextBox1.Focus(); 
      } 
     } 
     else 
      OpenFile(); 
    } 

    private void saveToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     SaveFile(); 
    } 

    private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     sfd.Filter = "Text Documents|*.txt"; 
     sfd.DefaultExt = "txt"; 
     if (sfd.ShowDialog() == DialogResult.Cancel) 
     { 
      richTextBox1.Focus(); 
     } 
     else 
     { 
      contents = richTextBox1.Text; 
      richTextBox1.SaveFile(sfd.FileName, RichTextBoxStreamType.PlainText); 

      this.Text = sfd.FileName; 
     }    
    } 

Когда мы открываем приложение Windows notepad, открываем файл, изменяем его содержимое и сохраняем его, он просто сохраняется без открытия диалогового окна «Сохранить файл». Но в программе блокнота, которую я создал выше, открывается диалоговое окно «Сохранить файл» при нажатии «Сохранить» после изменения содержимого сохраненного файла. Хотя одно и то же имя файла появляется в диалоговом окне сохранения файла, но при нажатии «Сохранить» появляется сообщение «То же имя файла уже существует. Вы хотите его заменить?». Это то, что я хочу удалить и сделать измененное содержимое сохранено непосредственно в открывшемся файле, не открывая диалог сохранения файла.Надлежащее функционирование «Сохранить файл» в программе «Блокнот» в C#

ответ

0

Что вам нужно сделать, это сохранить введенное имя файла, а затем, когда нажата опция сохранения, проверьте наличие ранее введенного имени файла. Если у вас есть, пропустите показ диалога и просто выполните код сохранения.

1

Установите sfd.OverwritePrompt = false в любое время после сборки и перед ShowDialog, чтобы подавить предупреждение о перезаписывании.

1

Вы хотите иметь два варианта для сохранения: кнопка «Сохранить как ...» и кнопку «Сохранить». Вы можете создать string, чтобы сохранить путь к открытому файлу. Место может также измениться, если пользователь указывает новое местоположение при сохранении файла. Если пользователь не открыл файл, кнопка «Сохранить как ...» откроет обычный диалог «Сохранить файл». После того как пользователь определяет местоположение своего документа, вы можете сохранить путь к файлу в эту строку и использовать `StreamWriter», чтобы сохранить его без диалога:

... 
using System.IO; 
... 

public partial class Form1 : Form 
{ 
    SaveFileDialog sfd = new SaveFileDialog(); 
    OpenFileDialog ofd = new OpenFileDialog(); 
    public string contents = string.Empty; 

    //string to hold file location 
    string currentFileLoc; 


    public Form1() 
    { 
     InitializeComponent(); 
     this.Text = "Untitled"; 
    } 

    private void newToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (richTextBox1.Text != contents) 
     { 
      DialogResult dr = MessageBox.Show("Do You want to save the changes made to " + this.Text, "Save", MessageBoxButtons.YesNoCancel); 
      if (dr == DialogResult.Yes) 
      { 
       sfd.Title = "Save"; 
       if (SaveFile() == 0) 
        return; 
       else 
       { 
        richTextBox1.Text = ""; 
        this.Text = "Untitled"; 
       } 
       contents = ""; 
      } 
      else if (dr == DialogResult.No) 
      { 
       richTextBox1.Text = ""; 
       this.Text = "Untitled"; 
       contents = ""; 
      } 
      else 
      { 
       richTextBox1.Focus(); 
      } 
     } 
     else 
     { 
      this.Text = "Untitled"; 
      richTextBox1.Text = ""; 
      contents = ""; 
     } 

    } 
    private int SaveFile() 
    { 
     sfd.Filter = "Text Documents|*.txt"; 
     sfd.DefaultExt = "txt"; 
     if (sfd.ShowDialog() == DialogResult.Cancel) 
     { 
      richTextBox1.Focus(); 
      return 0; 
     } 
     else 
     { 
      contents = richTextBox1.Text; 
      if (this.Text == "Untitled") 
       richTextBox1.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText); 
      else 
      { 
       sfd.FileName = this.Text; 
       richTextBox1.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText); 
      } 
      this.Text = sfd.FileName; 
      // 
      currentFileLoc = sfd.FileName; 
      return 1; 
     } 


    } 
    private void OpenFile() 
    { 
     ofd.Filter = "Text Documents|*.txt"; 
     if (ofd.ShowDialog() == DialogResult.Cancel) 
      richTextBox1.Focus(); 
     else 
     { 
      richTextBox1.LoadFile(ofd.FileName, RichTextBoxStreamType.PlainText); 
      this.Text = ofd.FileName; 
      contents = richTextBox1.Text; 
     } 

     currentFileLoc = ofd.FileName; 
     this.Text = currentFileLoc; 
    } 

    private void openToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (richTextBox1.Text != contents) 
     { 
      DialogResult dr = MessageBox.Show("Do You want to save the changes made to " + this.Text, "Save", MessageBoxButtons.YesNoCancel); 
      if (dr == DialogResult.Yes) 
      { 
       SaveFile(); 
       OpenFile(); 
      } 
      else if (dr == DialogResult.No) 
      { 
       OpenFile(); 
      } 
      else 
      { 
       richTextBox1.Focus(); 
      } 
     } 
     else 
      OpenFile(); 
    } 

    private void saveToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     Save(); 
    } 

    private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     SaveFile();    
    } 

    //new method 
    private void Save() 
    { 
     if (currentFileLoc != null) 
     { 
      using (StreamWriter writer = new StreamWriter(currentFileLoc)) 
      { 
       writer.WriteLine(richTextBox1.Text); 
      } 
     } 

     else 
      saveFile(); 
    } 
} 

Я предлагаю вам также заключить using(...){ } блок в try/catch и обрабатывать любые исключения.

+0

Извините, но это не решает мою проблему. Я хочу, чтобы содержимое, измененное в уже открытом файле, было сохранено в файле, не открывая диалоговое окно «Сохранить файл» при нажатии кнопки «Сохранить». – ash

+0

Но спасибо для идеи streamwriter .. Я получил смысл и сделал работу правильной .. – ash

Смежные вопросы