spen_lang
asked on
VB.net - Enable Save button upon Object Changes
Hi,
I would like to know the best way to enable a "save" button on a form when any of the objects values on the form have changed.
I know I could use the event textChanged etc but I have many objects of different types (textboxes, combo, checkbox) and coding the changed event for each object will take a long time.
Is there an approach where I can track all object changes?
Thanks, Greg
I would like to know the best way to enable a "save" button on a form when any of the objects values on the form have changed.
I know I could use the event textChanged etc but I have many objects of different types (textboxes, combo, checkbox) and coding the changed event for each object will take a long time.
Is there an approach where I can track all object changes?
Thanks, Greg
Here is some sample code using the AddHandler syntax in the form New.
You could extend this to iterate through the Forms control collection and automatically monitor each TextChanged event if that suited you.
For testing I started with a blank form and dragged on TextBox1, Label1, ComboBox1 and btnSave.
You could extend this to iterate through the Forms control collection and automatically monitor each TextChanged event if that suited you.
For testing I started with a blank form and dragged on TextBox1, Label1, ComboBox1 and btnSave.
Public Class Form1
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
InitMonitoring(TextBox1)
InitMonitoring(ComboBox1)
End Sub
Sub InitMonitoring(ByVal ctl As Control)
AddHandler ctl.TextChanged, AddressOf HandleTextChanges
End Sub
Private Sub HandleTextChanges(ByVal sender As Object, ByVal e As System.EventArgs)
Dim ctl As Control = TryCast(sender, Control)
If ctl Is Nothing Then Return
Label1.Text = ctl.Name & " text property changed"
btnSave.enabled = True
End Sub
End Class
Hi...
There is another way...
I use "Tag" in controls..I set the Tag = "Required" And when all "Required" Controls been filled then the Save Button goes to enabled.Take a look here..
https://www.experts-exchange.com/questions/28074682/Public-Event-in-Public-Function.html..
Yiannis
There is another way...
I use "Tag" in controls..I set the Tag = "Required" And when all "Required" Controls been filled then the Save Button goes to enabled.Take a look here..
https://www.experts-exchange.com/questions/28074682/Public-Event-in-Public-Function.html..
Yiannis
Is this when you are adding records or when editing? How is your form bound?
Smth like this?
Private controlState As New Dictionary(Of Control, String)
Private affectedControls As Control() = {CheckBox1, CheckBox2, CheckBox3, TextBox1, TextBox2, TextBox3, ComboBox1}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
setState()
End Sub
Private Sub setState()
controlState.Clear()
For Each c In affectedControls
Dim s As String = ""
If TypeOf c Is TextBox Then
s = c.Text
ElseIf TypeOf c Is ComboBox Then
s = CType(c, ComboBox).SelectedIndex.ToString
ElseIf TypeOf c Is CheckBox Then
s = CType(c, CheckBox).Checked.ToString
End If
controlState.Add(c, s)
Next
End Sub
Private Function IsDirty() As Boolean
For Each c In affectedControls
Dim s As String = ""
If TypeOf c Is TextBox Then
s = c.Text
ElseIf TypeOf c Is ComboBox Then
s = CType(c, ComboBox).SelectedIndex.ToString
ElseIf TypeOf c Is CheckBox Then
s = CType(c, CheckBox).Checked.ToString
End If
If s <> controlState(c) Then Return True
Next
Return False
End Function
ASKER
This is when I am editing records
ASKER
The form objects are bound to a dataset
One option is to use DataTable.GetChanges method. It returns you any rows that have been modified. But this will only work once user has moved out of a textbox (which would commit changes to the dataset).
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Note each 'changed' event can be added rapidly (via the context menu options from the form design) without you having to write code and each event can just have one line of your code - eg. calling a sub EnableSaveButton