2022/07/05(Tue) 21:31:55 編集(投稿者)
■No100127 (ゆうる さん) に返信
> ValueChangeだと、最大値でUPボタンを押してもイベントは発生しませんでした(逆も同じ)
NumericUpDown コントロールを継承して UpButton/DownButton メソッドをオーバーライドするとボタンを押したタイミングをキャッチできます。
Imports System.ComponentModel
Public Class NumericUpDownEx
Inherits NumericUpDown
Public Event UpButtonClicked As CancelEventHandler
Public Event DownButtonClicked As CancelEventHandler
Public Overrides Sub UpButton()
Dim ce As New CancelEventArgs()
RaiseEvent UpButtonClicked(Me, ce)
If Not ce.Cancel Then
MyBase.UpButton()
End If
End Sub
Public Overrides Sub DownButton()
Dim ce As New CancelEventArgs()
RaiseEvent DownButtonClicked(Me, ce)
If Not ce.Cancel Then
MyBase.DownButton()
End If
End Sub
End Class
年の NumericUpDownEx を numYear、月の NumericUpDownEx を numMonth とすると
Private Sub numMonth_UpButtonClicked(sender As Object,
ce As System.ComponentModel.CancelEventArgs) Handles numMonth.UpButtonClicked
If numMonth.Value = numMonth.Maximum AndAlso numYear.Value < numYear.Maximum Then
numYear.Value += 1
numMonth.Value = numMonth.Minimum
ce.Cancel = True
End If
End Sub
Private Sub numMonth_DownButtonClicked(sender As Object,
ce As System.ComponentModel.CancelEventArgs) Handles numMonth.DownButtonClicked
If numMonth.Value = numMonth.Minimum AndAlso numYear.Value > numYear.Minimum Then
numYear.Value -= 1
numMonth.Value = numMonth.Maximum
ce.Cancel = True
End If
End Sub
こんな感じで実現できます。