Нестандартные формы и стандартные диалоги
Разработка вкладки 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
- Разберитесь в коде...