VB.NET WinForms日期时间选择器更改事件运行两次?
当用户更改我的“结束”日期DateTinePicker控件上的日期时,我会运行以下代码:VB.NET WinForms日期时间选择器更改事件运行两次?,vb.net,winforms,datepicker,controls,Vb.net,Winforms,Datepicker,Controls,当用户更改我的“结束”日期DateTinePicker控件上的日期时,我会运行以下代码: Private Sub dtpEndDate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpEndDate.ValueChanged If dtpEndDate.Value.Date < dtpStartDate.Value.Date Then Messag
Private Sub dtpEndDate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpEndDate.ValueChanged
If dtpEndDate.Value.Date < dtpStartDate.Value.Date Then
MessageBox.Show("The end date should be after the start date", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
dtpEndDate.Value = Today
End If
End Sub
Private Sub dtpEndDate_ValueChanged(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理dtpEndDate.ValueChanged
如果dtpEndDate.Value.Date
这个过程似乎运行了两次,messagebox显示了两次
我是否有错误的事件,或者是否有更好的管理方法
我尝试使用建议的变量编辑它:
Private Sub dtpEndDate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpEndDate.ValueChanged
If m_blndtpEndDateIsDone = False Then
If dtpEndDate.Value.Date < dtpStartDate.Value.Date Then
MessageBox.Show("The end date should be after the start date", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
m_blndtpEndDateIsDone = True
dtpEndDate.Value = Today
Else
m_blndtpEndDateIsDone = False
End If
Else
m_blndtpEndDateIsDone = False
End If
wnd sub
Private Sub dtpEndDate_ValueChanged(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理dtpEndDate.ValueChanged
如果m_blndtpEndDateIsDone=False,则
如果dtpEndDate.Value.Date
不幸的是它仍然发射了两次
我希望它在每次修改结束日期dtpicker并且日期早于开始日期时触发一次
谢谢
菲利普这件事过去常发生在我身上 您可以证明您至少在WebForms中的两个位置处理事件:在asp页面和代码隐藏中。如果我在代码中的“dtpEndDate\u ValueChanged”方法签名后有语法“Handles dtpEndDate.ValueChanged”,如上图所示,那么我不必在我的aspx“OnClick=“dtpEndDate\u ValueChanged”或类似的东西中写入 当您在WinForms中而不是在WebForms中时,请确保您没有 或者类似于加载方法中的某个地方或其他地方 希望有帮助
伊夫这曾经发生在我身上 您可以证明您至少在WebForms中的两个位置处理事件:在asp页面和代码隐藏中。如果我在代码中的“dtpEndDate\u ValueChanged”方法签名后有语法“Handles dtpEndDate.ValueChanged”,如上图所示,那么我不必在我的aspx“OnClick=“dtpEndDate\u ValueChanged”或类似的东西中写入 当您在WinForms中而不是在WebForms中时,请确保您没有 或者类似于加载方法中的某个地方或其他地方 希望有帮助
Yves您可以使用dtpEndDate\u验证事件
Private Sub dtpEndDate_Validating(sender As Object, e As CancelEventArgs)
If dtpEndDate.Value.[Date] < dtpStartDate.Value.[Date] Then
MessageBox.Show("The end date should be after the start date", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.[Error])
End If
e.Cancel = True
End Sub
私有子dtpEndDate_验证(发送方作为对象,e作为CancelEventArgs)
如果dtpEndDate.Value.[Date]
或
如果要处理事件(dtpEndDate_ValueChanged),请在表单中定义一个布尔变量,并将该值设置为false。在执行第一次消息框后的事件中,将变量设置为true。然后检查这个变量
Dim isDone As Boolean = False
Private Sub dtpEndDate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpEndDate.ValueChanged
If Not isDone Then
If dtpEndDate.Value.Date < dtpStartDate.Value.Date Then
MessageBox.Show("The end date should be after the start date", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
IsDone = True
dtpEndDate.Value = Today
End If
End If
Dim isDone作为布尔值=False
私有子dtpEndDate_ValueChanged(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理dtpEndDate.ValueChanged
如果不是的话
如果dtpEndDate.Value.Date
结束子项您可以使用dtpEndDate\u验证事件
Private Sub dtpEndDate_Validating(sender As Object, e As CancelEventArgs)
If dtpEndDate.Value.[Date] < dtpStartDate.Value.[Date] Then
MessageBox.Show("The end date should be after the start date", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.[Error])
End If
e.Cancel = True
End Sub
私有子dtpEndDate_验证(发送方作为对象,e作为CancelEventArgs)
如果dtpEndDate.Value.[Date]
或
如果要处理事件(dtpEndDate_ValueChanged),请在表单中定义一个布尔变量,并将该值设置为false。在执行第一次消息框后的事件中,将变量设置为true。然后检查这个变量
Dim isDone As Boolean = False
Private Sub dtpEndDate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpEndDate.ValueChanged
If Not isDone Then
If dtpEndDate.Value.Date < dtpStartDate.Value.Date Then
MessageBox.Show("The end date should be after the start date", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
IsDone = True
dtpEndDate.Value = Today
End If
End If
Dim isDone作为布尔值=False
私有子dtpEndDate_ValueChanged(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理dtpEndDate.ValueChanged
如果不是的话
如果dtpEndDate.Value.Date
End Sub试试这个
Private Sub dtpEndDate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpEndDate.ValueChanged
If (dtpEndDate.Value.Date < dtpStartDate.Value.Date) And Not dtpEndDate.Value = Today Then
MessageBox.Show("The end date should be after the start date", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
dtpEndDate.Value = Today
End If
End Sub
Private Sub dtpEndDate_ValueChanged(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理dtpEndDate.ValueChanged
如果(dtpEndDate.Value.Date
您正在用今天的日期重置dtpEndDate
上的日期,因此您的dtpStartDate
应该小于今天的日期
,因此使用上述代码不会发生逻辑冲突。尝试一下
Private Sub dtpEndDate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpEndDate.ValueChanged
If (dtpEndDate.Value.Date < dtpStartDate.Value.Date) And Not dtpEndDate.Value = Today Then
MessageBox.Show("The end date should be after the start date", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
dtpEndDate.Value = Today
End If
End Sub
Private Sub dtpEndDate_ValueChanged(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理dtpEndDate.ValueChanged
如果(dtpEndDate.Value.Date