Chào các bạn!
Mình đang gặp một vấn đề khi làm theo thí dụ của Microsoft MSDN online tại link này:
http://msdn.microsoft.com/en-us/library/...e.11).aspx. Ý nghĩa demo của nó là khi thay đỗi dữ liệu trên form (có thể là các text box) thì nút Undo sẽ được bật lên cho phép người dùng có thể undo để lấy lại giá trị ban đầu của nó.
Mình đã làm 2 trường hợp:
Trường hợp 1: Làm giống theo source code Example(Sử dụng sự kiện Private Sub Form_Dirty(Cancel As Integer)):
Nút Undo không bao giờ được bật vì Me.Dirty luôn luôn = false
Sourde code:
Private Sub Form_Dirty(Cancel As Integer)
If Me.Dirty Then
Me!btnUndo.Enabled = True ' Enable button.
Else
Me!btnUndo.Enabled = False ' Disable button.
End If
End Sub
Sub btnUndo_Click()
Dim ctlC As Control
' For each control.
For Each ctlC in Me.Controls
If ctlC.ControlType = acTextBox Then
' Restore Old Value.
ctlC.Value = ctlC.OldValue
End If
Next ctlC
End Sub
Trường hợp 2: Thay thế Private Sub Form_Dirty() bằng event của 1 text box (DCHI : Địa chỉ) trên Form cho giống với giải thích của Microsoft (The following example enables the btnUndo button when data is changed. The UndoEdits( ) subroutine is called from the Dirty event of text box controls. Clicking the enabled btnUndo button restores the original value of the control by using the OldValue property.)
Nút Undo được bật khi khi sự kiện Dirty của Textbox xảy ra ở lần thứ 2(Lần đầu khi thay đổi giá trị vẫn không bật lên vì Me.Dirty = false)
Source Code:
Private Sub DCHI_Dirty(Cancel As Integer)
UndoEdits
End Sub
Sub UndoEdits()
If Me.Dirty Then
Me!btnUndo.Enabled = True ' Enable button.
Else
Me!btnUndo.Enabled = False ' Disable button.
End If
End Sub
Private Sub btnUndo_Click()
Dim ctlC As Control
' For each control.
For Each ctlC In Me.Controls
If ctlC.ControlType = acTextBox Then
' Restore Old Value.
ctlC.Value = ctlC.OldValue
End If
Next ctlC
End Sub
--------------------------------------------
Lưu ý thêm là khi mình debug thì trong cả 2 trường hợp khi xảy ra sự kiện thì giá trị của các text box mình vừa thay đổi trên form sẽ không lấy được trong Dirty Event, mà nếu không lấy được giá trị mới thì sao mà biết đường xử lý dữ liệu và ngăn không cho chỉnh sửa dữ liệu trên đó bằng cách set giá trị Cancel = true.
Mình mong muốn là khi có bất kỳ thay đỗi dữ liệu trên các control trên form là nút undo sẽ được bật lên liền và ngược lại khi không có thay đỗi gì thì nút undo sẽ chìm xuống.
Rất mong mọi người giải thích dùm và nếu ai biết rõ về sự kiện Dirty này có thể làm 1 demo khác dùm mình vì demo này thấy không ổn!
Chân thành cảm ơn.