取消Datetimepicker ValueChanged事件

时间:2014-03-13 05:38:00

标签: vb.net

有没有办法通过条件取消活动?我试过了e.cancel但它不起作用。取消事件后,dtpAudit_From.Value必须恢复为原始值。

Private Sub dtpAudit_From_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpAudit_From.ValueChanged
        'check if two DTPs (Date time pickers) are valid
        If dtpAudit_From.Value > dtpAudit_To.Value Then
            MsgBox("cancel the event")

        End If
End Sub

1 个答案:

答案 0 :(得分:1)

一种方法是继承DateTimePicker并添加ValueChanging事件。这是一个例子:

Public Class UIDateTimePicker
    Inherits DateTimePicker

    Public Sub New()
        Me.cachedValue = Me.Value
    End Sub

    Public Event ValueChanging As CancelEventHandler

    Protected Overrides Sub OnValueChanged(e As EventArgs)
        If (Not Me.reverting) Then
            Dim evargs As New CancelEventArgs(False)
            Me.OnValueChanging(evargs)
            If ((Not evargs Is Nothing) AndAlso evargs.Cancel) Then
                Dim value As Date = Me.Value
                Me.reverting = True
                Me.Value = Me.cachedValue
            Else
                Me.cachedValue = Value
                MyBase.OnValueChanged(e)
            End If
            Me.reverting = False
        End If
    End Sub

    Protected Overridable Sub OnValueChanging(e As CancelEventArgs)
        RaiseEvent ValueChanging(Me, e)
    End Sub

    Private cachedValue As DateTime
    Private reverting As Boolean

End Class

<强>用法

Private Sub dtpAudit_From_ValueChanging(sender As Object, e As CancelEventArgs) Handles dtpAudit_From.ValueChanging
    e.Cancel = {Condition}
End Sub