AftterPieceMoveイベントで移動後の新しい値(時間)の取得は不可能なのでしょうか。
2017年10月10日
ピースを移動させた際、AftterPieceMoveイベントで移動後のピースのStartプロパティを取得すると、移動前の値が返されます。移動後の新しい値(時間)の取得は不可能なのでしょうか。
説明
AftterPieceMoveイベントが呼び出された時点では、まだ移動操作の対象となったピースの時間は、移動前のままです。
引数CancelをTrueに変更せずにこのイベントから復帰した時点で更新されます。
対応
移動する/しないを判定する場合は、AftterPieceMoveイベント内で判定をして、移動したくないときは引数CancelにTrueを設定してください。
また、移動量をカスタマイズする場合は、引数CancelにTrueを設定したのち、VB側コード(=ここ)で、直接ピースのStart、Finishの値を変更してください。
(例) 移動を許可するかどうかを判定するサンプル
Private Sub KnTView1_AfterPieceMove( _
ByVal Cancel As KnTViewLib.ReturnBoolean, _
ByVal Minutes As Long)
Dim dtNewStart As Date, dtNewFinish
Dim pce As Piece
‘移動の対象となったピースを取得
Set pce = KnTView1.SelectedPieces(1)
‘移動前の時間に移動量(分数)を加算して、
‘新しい時間(移動先)を求める。
dtNewStart = DateAdd(“n”, Minutes, pce.Start)
dtNewFinish = DateAdd(“n”, Minutes, pce.Finish)
‘なんらかの判定条件
‘(以下の例は移動後の開始時間が8時前かどうかを判定)
If CDate(Format(dtNewStart, “h:nn”)) < CDate("8:00") Then
Cancel = True '8時前への移動を禁止
End If
End Sub
