Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 891 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 18:

Нестандартные формы и стандартные диалоги

Разработка вкладки SaveFileDialog

Кроме свойств, унаследованных от класса FileDialog, класс SaveFileDialog расширяется своими индивидуальными свойствами. Вот они

Публичные свойства класса 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
  • Разберитесь в коде...