Use the Enter and Leave events of the TextBoxes and CheckBoxes to Add and
Remove the Change handlers for those controls.
Here is an example for a checkbox--
Private Sub CheckBox1_CheckedEnter(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles CheckBox1.Enter
AddHandler CheckBox1.CheckStateChanged, _
AddressOf CheckBox1_CheckedChanged
End Sub
Private Sub CheckBox1_Leave(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles CheckBox1.Leave
RemoveHandler CheckBox1.CheckStateChanged, _
AddressOf CheckBox1_CheckedChanged
End Sub
Private Sub CheckBox1_CheckedChanged( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs)
'add code here
End Sub
When the user changes the check of a checkbox, the enter event will fire
first and add the checkchange event hander. Then the checkstatechanged event
will fire and read the new value for the checkbox.
If you have a lot of textbox and checkbox controls, you could, (from within
the form_load event), consolidate your code by pointing all of the Enter
addhandler statements for one control type to a single code block, and
likewise for Leave. If you do that, of course, the "sender" object is the
control that fired Enter or Leave, and you should use cast the objectly
appropriately...
directcast(sender, Textbox)
When you want to detect whether a change has been made for any control, you
have to come up with a monitoring system that captures original values after
the controls are populated. If the user makes changes, comare the current
value to the original value, and set the flag for the control accordingly.
If the user re-sets to the original value, your change flag should be reset
to false for that entry. This also gives you an opportunity to have a Cancel
Changes button that restores all changes to the current record to their
current unchanged values. You may be able to use the grid row as your
original values reference, but sometimes, by design, a grid will not show all
values that are shown in the controls on the form.
"vovan" wrote:
I have set of controls (Textboxes, checkboxes etc) along with the Grid on
Windows Form.
I use BindingSource to populate both Grid and the set of Controls. User
selects the record in the grid and all controls are populated with data from
the selected row.
The grid is going to be read only. Textboxes, checkboxes are going to be
read/write.
What event and how do I need to use to catch any change in any of the
textboxes? I tried to use TextBox_TextChanged, but it fires during initial
population and every time I change the active row in the grid. How can I
distinguish between changes made by the program and changes made by the
user?
I need to set the flag blnIsThereAnyChange = True when user changes the
contents of the textbox, and use the value of that flag in some procedures.
Thank you
vovan