Сообщений 6    Оценка 220        Оценить  
Система Orphus

Модель Document-View в .Net. Класс документа.

Автор: Попов Юрий
Опубликовано: 13.05.2004
Исправлено: 10.12.2016
Версия текста: 1.0

Введение
Быстрый старт - пример использования
Члены класса
Конструкторы
Методы
Свойства
События

Исходные тексты

Введение

Перейдя с MFC на .Net я довольно быстро обнаружил отсутствие в FCL класса, подобного MFC’шному классу CDocument, однако осталась старая привязанность к модели Document-View, в связи с этим на свет появился класс Document, призванный упростить работу с моделью Document-View в .Net WinForms.

Класс Document предоставляет базовую функциональность для пользовательских классов документа в модели Document-View. Вы можете его использовать для создания SDI и MDI приложений. Он реализует стандартные операции создания нового документа, открытия существующего, сохранения. При создании документа, открытии, изменении, сохранении возникают соответствующие события. Корректно обрабатываются такие ситуации как попытка открыть или создать новый документ при несохранённом текущем документе. Сериализация/десериализация данных документа выполняется в методах Serialize и Deserialize. Для очистки данных документа предназначен метод DeleteContents.

Быстрый старт - пример использования

Работа с классом Document подобна работе с MFC’шным классом CDocument (минимальные действия для SDI-приложения):

      public
      class MyDocument : Document
{
	…
}
MyDocument _Document = null;
…
void MainForm()
{
	_Document = new MyDocument();
	_Document.DocumentChanged += new EventHandler(SetFormTitle);
	_Document.DocumentCreated += new EventHandler(SetFormTitle);
	_Document.DocumentLoaded += new EventHandler(SetFormTitle);
	_Document.DocumentSaved += new EventHandler(SetFormTitle);

	…
}
СОВЕТ

В обработчиках событий удобно изменять заголовок формы, чтобы отображать состояние документа.

      // Occurs whenever the user loads the form.
      private
      void MainForm_Load(object sender, System.EventArgs e)
{
	_Document.New();
}
      // Handles the File\New command.
      private
      void miFileNew_Click(object sender, System.EventArgs e)
{
	_Document.New();
}

// Handles the File\Open command.privatevoid miFileOpen_Click(object sender, System.EventArgs e)
{
	_Document.Open();
}

// Handles the File\Save command.privatevoid miFileSave_Click(object sender, System.EventArgs e)
{
	_Document.Save();
}

// Handles the File\Save As command.privatevoid miFileSaveAs_Click(object sender, System.EventArgs e)
{
	_Document.SaveAs();
}

// Handles the File\Exit command.privatevoid miFileExit_Click(object sender, System.EventArgs e)
{
	if (_Document.CanCloseDocument())
		Application.Exit();
}
      // Occurs whenever the user closes the form, beform the form has 
      // been closed.
      private
      void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
	e.Cancel = !_Document.CanCloseDocument();
}

Члены класса

Конструкторы

public Document() Инициализирует новый экземпляр класса Document с параметрами по умолчанию.
public Document(string strFilter, string strDefaultExt, string strDefaultDocName) Инициализирует новый экземпляр класса Document.
strFilter – фильтр (см. св-во Filter).
strDefaultExt – расширение файлов документа (см. св-во DefaultExt).
strDefaultDocName – имя нового документа (см. св-во DefaultDocName).
public Document(string strFilter, string strDefaultExt, string strDefaultDocName, string strMessageCaption, string strSaveChangesPromptTemplate) Инициализирует новый экземпляр класса Document.
strFilter – фильтр (см. св-во Filter).
strDefaultExt – расширение файлов документа (см. св-во DefaultExt).
strDefaultDocName – имя нового документа (см. св-во DefaultDocName).
strMessageCaption – строка, которая будет использоваться в качестве заголовоков MessageBox’ов (см. св-во MessageCaption).
strSaveChangesPromptTemplate – строка, которая будет использоваться в качестве шаблона при формировании строки запроса на сохранение измененного файла (см. св-во SaveChangesPromptTemplate).

Методы

Основные

protected virtual void DeleteContents() Выполняет очистку документа без уничтожения самого документа. Этот метод вызывается перед уничтожением документа. Также он вызывается при повторном использовании объекта документа в SDI приложениях.
public virtual bool New() Выполняет создание нового документа. Обычно этот метод вызывают из обработчика команды File->New. Возвращает true, если документ был успешно создан. После успешного создания возникает событие DocumentCreated.
public virtual bool Open() Открывает существующий документ. Имя файла задает пользователь посредством диалога FileOpenDialog. Возвращает true, если документ был успешно открыт. После успешного создания возникает событие DocumentLoaded.
public virtual bool Open(string strPathToFile) Открывает существующий документ, путь к которому задан параметром strPathToFile. Возвращает true, если документ был успешно открыт. После успешного создания возникает событие DocumentLoaded.
public virtual bool Save() Сохраняет документ в файл. Если имя файла не задано (был создан новый документ и еще не сохранялся), его задает пользователь посредством диалога FileOpenDialog. Возвращает true, если документ был успешно сохранен. После успешного сохранения возникает событие DocumentSaved.
public virtual bool SaveAs() Сохраняет текущий документ в новый файл. Имя файла задает пользователь посредством диалога FileOpenDialog. Возвращает true, если документ был успешно сохранен. После успешного сохранения возникает событие DocumentSaved.
public virtual void SaveAs(string strPathToFile) Сохраняет текущий документ в новый файл, заданный параметром strPathToFile. Возвращает true, если документ был успешно сохранен. После успешного сохранения возникает событие DocumentSaved.

Сериализация

protected abstract void Serialize(string strPathToFile) Вызывается из методов Save* для сериализации данных документа.
protected abstract void Deserialize(string strPathToFile) Вызывается из методов Open* для десериализации данных документа.

Вспомогательные

protected virtual bool PromptFileName(bool bOpenFileDialog, out string strPathToFile) Запрашивает у пользователя имя файла для сохранения или открытия (посредством диалогов SaveFileDialog или OpenFileDialog).
public virtual bool CanCloseDocument() Возвращает true, в том случае, если можно закрыть документ без потери его содержимого. Если документ изменен (см. св-во Modified), то спрашивает у пользователя надо ли сохранять изменения в файле – при положительном ответе сохраняет.

Свойства

DefaultExt Возвращает расширение по умолчанию для файлов документа, которое будет использоваться в диалогах OpenFileDialog и SaveFileDialog.
DefaultDocName Возвращает строку, которая будет использоваться в качестве имени нового документа. По умолчанию используется следующее имя: "Untitled".
FileName Возвращает имя файла (включая расширение). Если имя не задано (например, если был создан новый документ и он еще не сохранялся), то возвращается имя файла документа по умолчанию (см. св-во DefaultDocName).
FilePath Возвращает путь к файлу документа.
Filter Возвращает файловый фильтр, который будет использоваться в диалогах OpenFileDialog и SaveFileDialog. По умолчанию используется следующий фильтр: "All files (*.*)|*.*".
MessageCaption Возвращает строку, которая будет использоваться в качестве заголовка MessageBox’ов.
Modified Задает/возвращает признак наличия изменений в документе.
SaveChangesPromptTemplate Возвращает строку, которая будет использоваться в качестве шаблона при формировании строки запроса на сохранение измененного файла. В строке запроса может быть использован заполнитель {0}, который будет заменен на имя файла. По умолчанию используется следующий шаблон: "Do you want to save the changes you made in {0}?".

События

DocumentChanged Возникает при изменениях документа.
DocumentCreated Возникает после успешного создания нового документа.
DocumentLoaded Возникает после успешной загрузки документа.
DocumentSaved Возникает после успешного сохранения документа.


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 6    Оценка 220        Оценить