На этом шаге мы рассмотрим назначение, основные свойства и пример использования этого компонента.
Компонент SaveFileDialog (рисунок 1) представляет собой стандартное диалоговое окно Сохранить.
Рис.1. Компонент SaveFileDialog
Свойства компонента приведены в таблице 1.
Свойство | Описание |
---|---|
Title | Текст в заголовке окна. Если значение свойства не задано, то в заголовке отображается текст Сохранить как |
FileNane | Полное имя файла, которое задал пользователь. В общем случае оно образуется из имени каталога, содержимое которого отображается в диалоговом окне, имени файла, которое пользователь ввел в поле Имя файла, и расширения, заданного значением свойства DefaultExt |
DefaultExt | Расширение файла по умолчанию. Если пользователь в поле Имя файла не укажет расширение, то к имени файла будет добавлено расширение (при условии, что значение свойства AddExtension равно True), заданное значением этого свойства |
InitialDirectory | Каталог, содержимое которого отображается при появлении диалога на экране |
RestoreDirectory | Признак необходимости отображать содержимое каталога, указанного в свойстве InitialDirectory, при каждом появлении окна. Если значение свойства равно False, то при следующем появлении окна отображается содержимое каталога, выбранного пользователем в предыдущий раз |
CheckPathExists | Признак необходимости проверки существования каталога, в котором следует сохранить файл. Если указанного каталога нет, то выводится информационное сообщение |
CheckFileExists | Признак необходимости проверки существования файла с заданным именем. Если значение свойства равно True и файл с указанным именем уже существует, появляется окно запроса, в котором пользователь может подтвердить необходимость замены (перезаписи) существующего файла |
Filter | Свойство задает один или несколько фильтров файлов. В окне отображаются только те файлы, имена которых соответствуют выбранному фильтру. Фильтр задается строкой вида Описание|Маска. Например, фильтр Текст|*.txt задает, что в окне диалога следует отображать только текстовые файлы. Фильтр может состоять из нескольких элементов, например: Текст|*.txt|Все файлы|*.* |
FilterIndex | Если фильтр состоит из нескольких элементов, например, Текст|*.txt|Все файлы|*.*, то значение свойства задает фильтр, который будет использоваться в момент появления диалога на экране |
Отображение диалога Сохранить обеспечивает метод ShowDialog. Его значением является код клавиши, нажатием которой пользователь завершил диалог (закрыл окно).
В качестве примера ниже приведен фрагмент программы MEdit - функция SaveText, которая записывает в файл текст, находящийся в поле редактирования.
// изменился текст в поле компонента textBox private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) { textChanged = true; // текст изменен } // Записывает текст в файл. // Возвращает 0 или -1, если пользователь // в окне Сохранить нажмет кнопку Отмена private: int TextToFile() { System::Windows::Forms::DialogResult dr; int r = 0; if (fn == String::Empty) { // это новый документ // запросить у пользователя имя файла // отобразить диалог Сохранить dr = saveFileDialog1->ShowDialog(); if (dr == System::Windows::Forms::DialogResult::OK) { fn = saveFileDialog1->FileName; r = 0; } else // в окне Сохранить пользователь // сделал щелчок на кнопке Отмена r = -1; } // сохранить файл if ( r == 0) { try { // получим информацию о файле fn System::IO::FileInfo^ fi = gcnew System::IO::FileInfo(fn); // поток для записи System::IO::StreamWriter^ sw = fi->CreateText(); sw->Write(textBox1->Text); sw->Close(); // закрываем поток textChanged = false; r = 0; } catch ( System::IO::IOException^ e) { MessageBox::Show(e->ToString(), "NkEdit", MessageBoxButtons::OK, MessageBoxIcon::Error); } } return r; } // Проверяет, есть ли изменения в тексте и // сохраняет текст в файле. // Возвращает: // 0 или -1, если пользователь // отказался от выполнения операции (нажал Cancel) private: int SaveText() { System::Windows::Forms::DialogResult dr; int r; r = 0; if (textChanged) { dr = MessageBox::Show( "В текст внесены изменения. Сохранить измененный текст?", "NkEdit", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Warning); switch (dr) { case System::Windows::Forms::DialogResult::Yes: r = TextToFile(); break; case System::Windows::Forms::DialogResult::No: r = 0; break; case System::Windows::Forms::DialogResult::Cancel: r = -1; break; }; } return r; }
Обратите внимание, в модуль формы надо вставить ссылку на пространство имен System::IO.
На следующем шаге мы закончим изучение этого вопроса.