Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Sử dụng Dirty event của Form
#1
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.
Chữ ký của huylam Xin chào, mình là huylam, Tham gia http://thuthuataccess.com/forum từ ngày 29-02 -12.
Reply
Những người đã cảm ơn
#2
Mình cũng đang gặp trường hợp này, nếu bạn có giải pháp cho mình biết với, thank

Ví dụ trên chỉ đúng trong trường hợp textbox.dirty thôi đã được gi rõ trong tài liệu của microsoft, hình như mình không thấy vi dụ về form.dirty

KeyDown > KeyPress > BeforeInsert > Dirty > KeyUp ... >form before update
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>dirty=false dirty=true

==> voi single form thi tinh hinh co ve don gian

Nều có subform ????

Hihi minh lam thế này

Dim flagMain As Integer 'tao cái cờ trong form

Private Sub Form_Load()
flagMain = 0 'khởi tạo biến
End Sub

Private Sub btn_cancel_Click()
If Me.Dirty Then
Me.Undo 'bi sua tren mainform
Else
If flagMain = 1 Then
MsgBox "main form dã bi update" ' user sau khi sửa trên form và tiếp tục sửa trên subform
'delete current record + delete toàn bộ row trong subform
Else
MsgBox "main form va con nguyen tem"
' thoải mái docmd.close
End If
End If

End Sub

Private Sub Form_Dirty(Cancel As Integer)
flagMain = 1 'có động thái vào vào form main -> bật cờ
End Sub

-----------------
Có vẻ hữu hiệu, mời các bạn thảo luận thêm :d
Chữ ký của tanthuc Xin chào, mình là tanthuc, Tham gia http://thuthuataccess.com/forum từ ngày 04-10 -12.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại. MinhnHang 6 303 29-11-16, 09:11 PM
Bài mới nhất: ongke0711
  [Thủ Thuật] Tạo thanh tiến trình trên Form (Progress bar) khi xử lý dữ liệu ongke0711 18 1,498 21-10-16, 10:17 PM
Bài mới nhất: ongke0711
  Viết phần quyền sử dụng tt1212 9 496 01-10-16, 12:26 AM
Bài mới nhất: maidinhdan
  Tạo Form đăng ký tài khoản phuc_thanhtien 15 1,018 27-09-16, 12:19 AM
Bài mới nhất: maidinhdan
  [Help] Gửi message đóng ứng dụng tới end user tvn_hut 11 678 30-08-16, 08:27 PM
Bài mới nhất: maidinhdan

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ