Проверить, были ли внесены какие-либо изменения в TabPage
Поэтому мне интересно, может ли кто-нибудь дать мне хорошую идею, как что-то сделать. У меня есть tabControl в моем приложении - я загружаю страницу - TabPage1 - примерно с 25-30 полями. При загрузке всех данных - я запускаю цикл, чтобы сохранить каждое контрольное значение в.tag. У меня также есть функция isDirty(), которая в основном проверяет ctr.tag.tostring <> ctr.text каждого элемента управления. Мне трудно понять, как создать быстрый обработчик для проверки всех элементов управления в форме. Я пытался использовать TagPage1.Validating, однако это ничего не делает.
Моя функция isDirty() выглядит следующим образом...
Private Function isDirty() As Boolean
isDirty = False
For Each ctr As Control In TabPage1.Controls
If TypeOf ctr Is TextBox And ctr.Enabled = True Then
If ctr.Tag.ToString <> ctr.Text Then
isDirty = True
End If
End If
'more if statements for comboboxes and such
Next
End Function
Я надеюсь, что смогу подключить эту функцию где-нибудь и сделать вызов на что-то вроде
if isDirty() then
MsgBox "You have made a change to this form"
End if
Должен ли я вызывать это при изменении выбора каждого элемента управления?
1 ответ
Есть 2 подхода
- Когда большинство элементов управления не имеют обработчика событий изменения, ваш подход кажется правильным. Кстати, в приведенном выше коде вы пропустили
Exit For
, послеisDirty = True
, - Когда большинство элементов управления изменили реализованный обработчик событий (это будет иметь место, если в вашем дизайне у вас есть модели данных / объекты), вместо того, чтобы проверять изменения в цикле, я бы предпочел проверить, когда это изменение сделано. Я имею в виду объявить переменную уровня формы
bool changed
, Управление какtextbox
,combobox
,radiobutton
,checkbox
и т. д. обычно имеют свои обработчики событий изменения, если изменение сделано установленнымchanged
вTrue
,