ピースを移動させた際、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