Управление изменениями в приложении Windows Forms C # - PullRequest
4 голосов
/ 29 января 2009

У меня есть форма с несколькими компонентами, такими как TextBox и ComboBox, и мне нужно знать, когда нажимается кнопка «Выход», если в форме произошли какие-либо изменения. Есть ли способ сделать это?

Ответы [ 4 ]

3 голосов
/ 29 января 2009

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

Вероятно, это можно сделать довольно просто, пройдя все ваши элементы управления по нагрузке.

1 голос
/ 29 января 2009

Вы можете перебрать все элементы управления, но это должно быть рекурсивным, потому что элемент управления может содержать элементы управления, например, (нет нулевых проверок на краткость):

private void IterateOverControls( Control parent )
{
    ProcessControl( parent );

    foreach( Control control in parent.Controls )
        IterateOverControls( control );
}

В ProcessControl вы можете подключить обработчики событий для обработки OnEnter (для сохранения состояния) и OnLeave (для проверки текущего состояния относительно сохраненного состояния). Вам нужно будет отцепить все обработчики событий при утилизации. Кроме того, код для сохранения проверки состояния должен был бы измениться для различных типов управления, например TextBox был бы свойством Text, но переключатель был бы индексом и т. Д. Очевидно, что это становится проще, если вы можете сравнить состояние формы с вашим базовым состоянием хранилища данных, и в этом случае вы можете просто выполнить сравнение для каждого события OnLeave.

Следует также учитывать одну вещь: нужно ли отслеживать реальные изменения? Например, у меня есть 2 переключателя: A и B. Я проверяю B (изменение), поэтому изменяется кнопка out или что-либо еще со свойством Enabled. Затем я нажимаю на A (то есть обратно в исходное состояние). Вам нужно вернуть кнопку в этот момент?

Вот почему вы должны обратить внимание на подход контроллера модели:)

0 голосов
/ 29 января 2009

Если это уже почти закончено, и вам нужно что-то быстрое, вероятно, будет проще просто всегда предполагать, что что-то изменилось, а затем в вашей логике обновления (что бы она ни делала) не обновлять вещи, которые все еще то же самое.

Как кто-то упомянул, для кого-то очень возможно изменить что-то, а затем изменить это обратно. Что бы вы хотели сделать в этом случае? Вы не сможете поддерживать надлежащее грязное состояние формы без излишней дополнительной работы ... это то, что вам нужно запланировать перед началом, на самом деле.

0 голосов
/ 29 января 2009

Самый простой способ сделать это - просто использовать переменную в форме, которая называется что-то вроде «IsChanged». Установите значение false, когда форма первоначально отображается, и установите значение true, если они вносят какие-либо изменения.

Кроме того, вы можете записывать значения всего, когда форма отображается, а когда они заканчиваются, сверяйте текущие значения со старыми, чтобы увидеть, изменилось ли что-либо.

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