0

我正在开发 Visual Basic V6.0 应用程序。

我有一个带有垂直滚动条的表单来更改日历和标签中的日期。

我附上了表格的截图。当用户在突出显示的垂直条箭头上仅单击一次时 - 更改事件会被多次触发。

即使我们只点击一次,我也无法弄清楚为什么会多次触发。

我已经尝试在调试中运行应用程序 - 我没有看到任何问题。

此外,我尝试将 log msg - 这也表示 - 事件触发了两次。如果第二次调用,还尝试将标志变量退出子。

这不是每次都发生,但是是的,大多数时候。

任何建议表示赞赏。

致以最热烈的问候

维沙尔·帕特尔

Private Sub Vscroll2_Change()
Dim newmonth As Integer
Dim pass_date As String
Dim curr_dtime As String
Dim yeard As Variant
Dim chg_date As String
Dim set_new_month As Integer


newmonth = VScroll2.Value
curr_dtime = GetFormTagVar(Me, "CURR_DTIME")
Call SetFormTagVar(Me, "OLD_DTIME", curr_dtime)
yeard = Year(curr_dtime)

'set calendar refresh on if we have changed year or month
If (yeard <> Year(curr_dtime)) Or (Month(CVDate(curr_dtime)) <> newmonth) Then
   SetCalRefresh (True)
End If

If Month(CVDate(curr_dtime)) <> newmonth Then
   set_new_month = False
   If newmonth = 13 Then
      newmonth = 1
      set_new_month = True
      yeard = Year(curr_dtime)
      yeard = yeard + 1
   End If

   If newmonth = 0 Then
      newmonth = 12
      set_new_month = True
      yeard = Year(curr_dtime)
      yeard = yeard - 1
   End If

   '* figure out the new date
   If newmonth < 10 Then
       pass_date = yeard & "0" & newmonth & "01" & "0000"
   Else
       pass_date = yeard & newmonth & "01" & "0000"
   End If
   pass_date = DatePaint(pass_date, True)

   Call SetFormTagVar(Me, "CURR_DTIME", pass_date)
   Call SetFormTagVar(Me, "NEW_DTIME", "1")
   lbldate.Caption = DatePaint(DateParseFnc(pass_date), True)
   chg_date = GetFormTagVar(Me, "CURR_DTIME")
   If set_new_month Then
    Call SetFormTagVar(Me, "NEW_MONTH", YES_FLAG)
    VScroll2.Value = newmonth
   End If
   Call check_calendar(Me)
   Call SetupNotesMenuItems
End If

'We're done
End Sub

在此处输入图像描述

4

1 回答 1

1
If set_new_month Then
    Call SetFormTagVar(Me, "NEW_MONTH", YES_FLAG)
    VScroll2.Value = newmonth
End If

_Change在这里,您从事件中设置滚动条的值。这会导致另一个_Change开火。当你这样做时,你会得到你描述的情况。通常的解决方案是用一个布尔值包围更改,表示更改已经发生。

于 2017-01-25T14:50:39.597 回答