Лекция: SaveFileDialog
Для сохранения файлов добавляем на форму frmmain элемент управления saveFileDialog1. Cвойства этого диалога в точности такие же, как у OpenFileDialog (рис. 2.12). Переходим в код формы blank:
//Создаем метод Save, в качестве параметра объявляем строку адреса файла.
public void Save(string SaveFileName)
{
//Если файл не выбран, возвращаемся назад (появится встроенное предупреждение)
if (SaveFileName == "")
{
return;
}
else
{
//Создаем новый объект StreamWriter и передаем ему переменную //OpenFileName
StreamWriter sw = new StreamWriter(SaveFileName);
//Содержимое richTextBox1 записываем в файл
sw.WriteLine(richTextBox1.Text);
//Закрываем поток
sw.Close();
//Устанавливаем в качестве имени документа название сохраненного файла
DocName = SaveFileName;
}
}
2.6.
Добавляем обработчик пункта меню Save формы frmmain:
private void mnuSave_Click(object sender, System.EventArgs e)
{
//Можно программно задавать доступные для обзора расширения файлов
//openFileDialog1.Filter = «Text Files (*.txt)|*.txt|All Files(*.*)|*.*»;
//Если выбран диалог открытия файла, выполняем условие
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
//Переключаем фокус на данную форму.
blank frm = (blank)this.ActiveMdiChild;
//Вызываем метод Save формы blank
frm.Save(saveFileDialog1.FileName);
//Указываем, что родительской формой является форма frmmain
frm.MdiParent = this;
//Присваиваем переменной FileName имя сохраняемого файла
frm.DocName = saveFileDialog1.FileName;
//Свойству Text формы присваиваем переменную DocName
frm.Text = frm.DocName;
}
}
Запускаем приложение. Теперь файлы можно открывать, редактировать и сохранять. Однако, при сохранении внесенных изменений в уже сохраненном файле вместо его перезаписи вновь появляется окно SaveFileDialog. Изменим нашу программу так, чтобы можно было сохранять и перезаписывать файл. В конструкторе формы frmmain после InitializeComponentотключим доступность пункта меню Save:
mnuSave.Enabled = false;
Переключаемся в режим дизайна формы frmmain и добавляем пункт меню Save As после пункта Save. Устанавливаем следующие свойства этого пункта: Name — mnuSaveAs, Shortcut — CtrlShiftS, Text Save &As. В обработчике Save As вставляем вырезанный обработчик пункта Save и добавляем включение доступности Save:
mnuSave.Enabled = true;
Сохранять изменения требуется как в только что сохраненных документах, так и в документах, созданных ранее и открытых для редактирования. Поэтому добавим в метод Open включение доступности пункта меню Save:
private void mnuOpen_Click(object sender, System.EventArgs e)
{
mnuSave.Enabled = true;
}
В обработчике пункта Save добавим простую перезапись файла — вызов метода Save формы blank:
private void mnuSave_Click(object sender, System.EventArgs e)
{
//Переключаем фокус на данную форму.
blank frm = (blank)this.ActiveMdiChild;
//Вызываем метод Save формы blank
frm.Save(frm.DocName);
}
Запускаем приложение. Теперь, если мы работаем с несохраненным документом, пункт Save неактивен (рис. 2.14), после сохранения он становится активным (рис. 2.15) и, кроме того, работает сочетание клавиш Ctrl+S. Можно сохранить копию текущего документа, вновь воспользовавшись пунктом меню Save As (рис. 2.16).
Рис. 2.14.Новый документ
Рис. 2.15.Сохраненный документ
Рис. 2.16.Сохранение копии
Конечно, эту задачу можно решить более элегантно — совместив оба пункта сохранения документа в один. Но мне хотелось показать разницу между простым сохранением и перезаписью файлов, кроме того, мы научились отключать доступность пунктов меню.