Шаблон для несохраненных изменений - PullRequest
2 голосов
/ 15 апреля 2009

Я разрабатываю приложение winforms с множеством различных форм и пользовательских элементов управления. Есть ли рекомендуемый шаблон, который я мог бы реализовать, который уведомляет пользователя о несохраненных изменениях в текущей форме / элементе управления при выходе из формы / элемента управления, а также при закрытии приложения?

Ответы [ 2 ]

1 голос
/ 11 мая 2009

Я использую LLBL Gen pro для ORM, так что в объекты встроено хорошее отслеживание сущностей. Я как бы катал свою собственную, которая, кажется, работает довольно хорошо. Я создал новый интерфейс, который реализуют мои базовые пользовательские элементы управления и базовые формы:

public interface IClosingNotification
{
    /// <summary>
    /// True if there is a dirty entity (or a dirty entity in the collection) present
    /// </summary>
    bool DirtyEntityPresent { get; }
    /// <summary>
    /// Register an entity to be watched for changes
    /// </summary>
    /// <param name="entity"></param>
    void RegisterForClosingNotification(IEntity entity);
    /// <summary>
    /// Register a collection to be watched for changes
    /// </summary>
    /// <param name="collection"></param>
    void RegisterForClosingNotification(IEntityCollection collection);
    /// <summary>
    /// Returns true if the form should close without any notification
    /// </summary>
    /// <returns></returns>
    bool ShouldClose();
}

В моем базовом элементе управления / форме у меня есть коллекция сущностей, которые я наблюдаю в каждой форме, и у меня есть метод CloseForm () в этих классах, который я использую при закрытии формы. В моих формах всякий раз, когда я создаю объект, я могу зарегистрировать его для закрытия уведомления, используя: RegisterForClosingNotification (MyCustomer);

Это хорошо работает в нашем сценарии.

1 голос
/ 15 апреля 2009
  1. Памятка - способ инкапсулировать отменяемые изменения.

    Затем вы можете вести журнал ваших незафиксированных экземпляров сувениров.

    Но обычно это сложно.

  2. Состояние обычно лучше.

    Ваше приложение имеет два состояния «изменения»: сохраненные все изменения, несохраненные изменения.

    Каждое государство имеет правило перехода, основанное на методах «изменить» и «сохранить».

    • Реализация "save" сохраненных всех изменений ничего не делает.

    • Реализация «save» для несохраненных изменений устанавливает состояние «Saved All Changes».

    • Реализация "изменения" в реализации Сохраненные все изменения устанавливает состояние в Несохраненные изменения.

    • Реализация "изменения" в несохраненных изменениях ничего не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...