等效于 DateTimePicker 上的 SelectionChangeCommitted?

Equivalent of SelectionChangeCommitted on DateTimePicker?

我有一些功能需要在加载表单后才能激活。
我在 ComboBoxes 上遇到了这个问题,并使用 SelectionChangeCommitted 而不是 SelectedValueChanged 解决了它,因为第一个只被解雇了当用户是进行更改的人时。

DateTimepicker.ValueChanged 是否有任何等效事件(因为像 Select.SelectedValueChanged 这样的事件在一切设置之前被触发)?

这种情况很常见。
在第一次初始化窗体之后,当控件的值被修改时,关联的事件 is/are 引发,以通知订阅者更改。
ComboBox SelectionChangeCommitted 事件是一个值得注意的例外:它用于区分用户直接输入和选择中更通用的值更改。

DateTimepicker 控件与大多数其他标准控件一样,不提供类似的事件。

由于事件处理程序在引发事件时订阅了附加代码 运行,因此避免这些例程在窗体上控件的值由初始化它们的代码修改。

有多种不同的方法可以管理可能在错误的时间引发不必要的级联效应的事件。其中两个比较常见:

  • 仅在控件初始化完成后附加事件处理程序,使用委托给 attach/detach 处理程序的专用方法
  • 使用布尔字段作为标志,以指示引发事件时与事件处理程序关联的代码是否应为 运行。
  • 两者都

在初始化程序后附加处理程序:

Public Sub New()
    InitializeComponent()

    InitializeDataStuff()
    InitializeEverythingElse()

    AttachHandlers()
End Sub

Private Sub Form_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
    RemoveHandlers()
End Sub

Protected Sub AttachHandlers()
    Addhandler SomeControl.SomeEvent, AddressOf SomeHandlerMethod
    Addhandler SomeOtherControl.SomeOtherEvent, AddressOf SomeOtherHandlerMethod
    (...)
End Sub

Protected Sub RemoveHandlers()
    Removehandler SomeControl.SomeEvent, AddressOf SomeHandlerMethod
    Removehandler SomeOtherControl.SomeOtherEvent, AddressOf SomeOtherHandlerMethod
    (...)
End Sub

使用布尔字段。使用表单设计器附加事件处理程序:

private DontBotherToRunNow As Boolean = True

Public Sub New()
    InitializeComponent()

    InitializeDataStuff()
    InitializeEverythingElse()

    DontBotherToRunNow = False
End Sub

Private Sub DateTimePicker_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged
    If DontBotherToRunNow Then Return
    (...)
    'Do something
End Sub