Нестандартные формы и стандартные диалоги
Разработка вкладки SaveFileDialog
Кроме свойств, унаследованных от класса FileDialog, класс SaveFileDialog расширяется своими индивидуальными свойствами. Вот они
| Свойство | Тип | Пояснения |
|---|---|---|
| CreatePrompt | bool | Получает или устанавливает флаг, определяющий, должно ли диалоговое окно запрашивать у пользователя разрешение создать файл, если пользователь указал имя файла, который не существует. Значение по умолчанию равно false - не запрашивать, а сразу записывать в новый файл |
| OverwritePrompt | bool | Получает или устанавливает флаг, определяющий, отображать ли предупреждение, если пользователь указал имя файла, который уже существует. Значение по умолчанию равно true - запрашивать подтверждение на перезапись содержимого существующего файла |
При разработке вкладки OpenFileDialog мы в режиме проектирования уже добавили к приложению экземпляр класса SaveFileDialog и оболочка сохранила ссылку на него как поле класса saveFileDialog. В обработчике btnSaveFile_Click() события Click кнопки мы использовали этот экземпляр и динамически настраивали его свойства. В новой вкладке SaveFileDialog мы будем использовать тот же самый объект saveFileDialog, но будем запускать его каждый раз с новыми настройками. Для того, чтобы вернуться к первоначальным настройкам, а затем программно применить новые, каждый раз нужно использовать метод Reset() этого объекта для восстановления настроек по умолчанию.
Сначала мы оформим интерфейс вкладки изучения настроек диалогового окна SaveFileDialog, а потом определим ее функциональность. На самой вкладке мы определим список флажков, устанавливающих булевы свойства диалогового окна SaveFileDialog, ряд текстовых полей, устанавливающих значения строковых свойств, и кнопку вызова диалогового окна с установленными настройками. Никакого кода записи в выбранные файлы мы писать не будем, а только познакомимся с функциональностями самого диалогового окна.
-
Оформите
вкладку SaveFileDialog в соответствии со
снимком. Список флажков checkedListBox заполните
через коллекцию Items строго по названиям
свойств класса FileDialog, поскольку далее они будут участвовать в
коде
-
Для
всех трех кнопок вкладки создайте обработчики события Click,
оберните их секцией #region, чтобы с учетом
вспомогательных функций код стал таким
#region Вкладка SaveFileDialog
private void btnBrowseFileName_Click(object sender, EventArgs e)
{
openFileDialog.CheckFileExists = false;
openFileDialog.CheckPathExists = false;
openFileDialog.ShowDialog();
String str =openFileDialog.FileName;
txtFileName.Text = str;
txtInitialDirectory.Text = Path.GetDirectoryName(str);
}
private void btnShowDialog_Click(object sender, EventArgs e)
{
CheckToSaveFileDialog(); // Настраиваем окно
saveFileDialog.ShowDialog();// Показать окно
SaveFileDialogToCheck(); // Обновить интерфейс
}
private void btnReset_Click(object sender, EventArgs e)
{
// Сбрасываем состояние диалогового окна
// в значения по умолчанию
saveFileDialog.Reset();
SaveFileDialogToCheck();
}
void CheckToSaveFileDialog()
{
// Корректируем диапазон значений NumericUpDown
filterIndex.Minimum = 1;
filterIndex.Maximum = txtFilter.Text.Split('|').Length / 2;
// Устанавливаем булевы свойства
saveFileDialog.AddExtension =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("AddExtension"));
saveFileDialog.CheckFileExists =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("CheckFileExists"));
saveFileDialog.CheckPathExists =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("CheckPathExists"));
saveFileDialog.DereferenceLinks =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("DereferenceLinks"));
saveFileDialog.RestoreDirectory =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("RestoreDirectory"));
saveFileDialog.ShowHelp =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("ShowHelp"));
saveFileDialog.ValidateNames =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("ValidateNames"));
saveFileDialog.CreatePrompt =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("CreatePrompt"));
saveFileDialog.OverwritePrompt =
checkedListBox.GetItemChecked(
checkedListBox.Items.IndexOf("OverwritePrompt"));
// Устанавливаем свойства из полей интерфейса
saveFileDialog.DefaultExt = txtDefaultExt.Text;
saveFileDialog.FileName = txtFileName.Text;
saveFileDialog.Filter = txtFilter.Text;
saveFileDialog.FilterIndex = (int)filterIndex.Value;
saveFileDialog.InitialDirectory = txtInitialDirectory.Text;
saveFileDialog.Title = txtTitle.Text;
}
void SaveFileDialogToCheck()
{
// Настраиваем список флажков интерфейса
// в соответствии со свойствами
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("AddExtension"),
saveFileDialog.AddExtension);
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("CheckFileExists"),
saveFileDialog.CheckFileExists);
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("CheckPathExists"),
saveFileDialog.CheckPathExists);
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("DereferenceLinks"),
saveFileDialog.DereferenceLinks);
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("RestoreDirectory"),
saveFileDialog.RestoreDirectory);
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("ShowHelp"),
saveFileDialog.ShowHelp);
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("ValidateNames"),
saveFileDialog.ValidateNames);
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("CreatePrompt"),
saveFileDialog.CreatePrompt);
checkedListBox.SetItemChecked(
checkedListBox.Items.IndexOf("OverwritePrompt"),
saveFileDialog.OverwritePrompt);
// Настроиваем те поля интерфейса, которые можно изменить в окне
// txtDefaultExt.Text = saveFileDialog.DefaultExt;
txtFileName.Text = saveFileDialog.FileName;
// txtFilter.Text = saveFileDialog.Filter;
// filterIndex.Value = saveFileDialog.FilterIndex;
// txtInitialDirectory.Text = saveFileDialog.InitialDirectory;
// txtTitle.Text = saveFileDialog.Title;
}
#endregion
Листинг
18.23.
Код секции #region для вкладки SaveFileDialog
-
Запустите
приложение и испытайте работу вкладки SaveFileDialog
-
Разберитесь
в коде...
