UPD. Этот текст о способе отслеживаний изменений в целом
Отслеживание изменений в документе заключается в двух пунктах:
- Запоминание исходных данных (при открытии формы и загрузке данных)
- Сравнение исходных данных с актуальными (при закрытии формы)
Оба пункта могут решаться немного по-разному, в зависимости от того, какую цель вы ставите: отслеживать изменения в паре контролов, либо сделать более-менее универсальный механизм, который будет работать и для документа в сотню полей.
Изменения в паре контролов можно отслеживать "в лоб": завести N переменных, в которые будут сохраняться исходные данные. При необходимости узнать, были ли изменения, каждая из переменных будет сравниваться с актуальным значением.
Если же документы большие, либо у вас много подобных форм, то требуется несколько более универсальное решение, которое будет уметь запоминать большое количество исходных данных и сравнивать их с актуальными.
Решение попроще привязано к форме и к контролам: использовать словарь с именами контролов и исходными значениями. Запоминаете исходные значение после загрузке данных, затем при выходе сравниваете актуальные значения: для каждого контрола извлекаем из словаря исходное значение и сравниваем его со значением в контроле.
Решение, не привязанное к формам, требует наличия объекта с данными (POCO/DTO) и некоторого change tracker'а, который будет в точно такой же словарь запоминаете пары "поле - значение", считанные с помощью рефлексии, и уметь сказать, отличается ли запомненный объект от текущего.
Это если вкратце. Некоторые моменты, например, отслеживание изменений вложенных объектов, я опустил.
Код не писал, потому что написать его можно много. Если будут вопросы -- задавайте, обновлю ответ.