インタラクティブなガントチャートVARCHART XGantt:終了日を計算する方法(のActiveX版)

VARCHART XGanttは、インタラクティブなガントチャートコントロールであり、そのモジュラー設計は、あなたとあなたの顧客のニーズを満たすアプリケーションを作成することができます。それは、迅速かつ容易にそれが簡単に複雑なデータを理解すること、あなたは、パフォーマンスのボトルネックを特定遅延や資源の効率的な使用を避けるために支援し、あなたのアプリケーションに統合することができます。

〜この記事では、どのようにVARCHART XGantt主要なコンピューティング活動終了時刻を説明し、興味のある友人は、自分の手を見てああすることができます

表の終了日の欄は空白のまま。「からVARCHART XGanttのカレンダーに含めることができる助けを借り、スタート」および「の期間フィールド計算のイベント」。

デフォルトのカレンダーでは、営業日(月曜日〜金曜日)は、活動時間として定義され、週末(土曜日と日曜日)に、非アクティブ時間として定義されます。

図では、あなたは灰色の背景で非アクティブな時間を識別することができます。「により、ノード」プロパティページを無効にする「ノードに割り当てられたカレンダーのカレンダーをオフにするオプションを」。

かどうか、カレンダーの計算でその違いに注意してください。

活動は、金曜日から始まるとカレンダーが有効になっている場合、イベントは火曜日に終了します3日間の最後。いいえ、カレンダー、イベントは日曜日に終了しません。

オブジェクトを介して終了日(...)のAddDuration VcCalendar計算する方法。各活動のため、開始と持続時間。彼らは、インデックスによって対応するデータフィールドから取得することができます。DataFieldプロパティ(...)終了日を設定し、その後、あなたが呼び出す必要がありUpdateNode VcNodeを使用すると、データへの変更を見ることができるような方法。

サンプルコード

VcCalendarとしてDIM tmpCal 
日付として薄暗いtmpDate 
tmpCal = VcGantt1.CalendarCollection.Active設定
tmpDate = tmpCal.AddDuration(node.DataField(2)、node.DataField(4))
node.DataField(3)= tmpDate 
node.UpdateNode

開始日と終了日が自動的にマウス操作によって、アクティブ時に配置されている活動を作成または変更。

QQのスクリーンショット20190827144111.png

これとは対照的に、APIまたは編集ダイアログと日付の設定は非勤務時間中に配置することができます。

QQのスクリーンショット20190827144136.png

結果の日付を計算することにより、常に就業時間内に位置しています。ためには日付が活動期間の必要な開始日と終了日から、作業時間のAPIで設定して計算することを確実にします。

サンプルコード

tmpDate = tmpCal.AddDuration(node.DataField(3)、_ 
 (-1)* node.DataField(4))
node.DataField(2)= tmpDate

データの一貫性を維持するために、損失または負の持続時間は正しくないとみなされなければならない、と0にリセット。開始日が欠落している場合、終了日を計算することができません。名前の必要なコードまとめSetNodeEndDate(...)別の方法を。

サンプルコード

Private Sub SetNodeEndDate(ByVal node As VcNode)
 'Avoid empty or negative duration
 If node.DataField(4) = "" Or node.DataField(4) < 0 Then
 node.DataField(4) = "0"
 End If
 'Start date empty then end date should also be empty
 If node.DataField(2) = "31.12.1899 00:00:00" Then
 node.DataField(3) = ""
 Else
 'Precondition is property page nodes
 '"Assign calendar to nodes" must be true
 Dim tmpCal As VcCalendar
 Dim tmpDate As Date
 Set tmpCal = VcGantt1.CalendarCollection.Active
 tmpDate = tmpCal.AddDuration(node.DataField(2), _
 node.DataField(4))
 node.DataField(3) = tmpDate
 'Start date only in active times
 tmpDate = tmpCal.AddDuration(node.DataField(3), _
 (-1) * node.DataField(4))
 node.DataField(2) = tmpDate
 node.UpdateNode
 End If
End Sub

需要计算日期:

1、活动结束后

2、通过数据编辑对话框或就地编辑器修改日期或持续时间之后

3.、API修改活动值后

然而,在通过鼠标交互进行修改之后,不必启动计算,因为这将自动执行内部计算。

可以通过VcGantt对象的属性NodeCollection来设置包括所有节点的计算循环。它的代码将被添加到事件Form1_Load(...)的末尾。

示例代码

'Calculate end date for all nodes
Dim node As VcNode
For Each node In VcGantt1.NodeCollection
 SetNodeEndDate node
Next

可以通过事件OnNodeModifyComplete捕获用户引起的数据更改。方法调用执行结束日期的计算。

示例代码

プライベートサブVcGantt1_OnNodeModifyComplete _ 
 (VcGanttLib.VcNode、_としてByValノード
 ブールとしてByVal isLastNodeInSeries)は
 SetNodeEndDateノード
End Subの

データはAPIを介して変更されている場合は、呼び出す必要がありSetNodeEndDate(...を)


おすすめ

転載: blog.51cto.com/14467432/2433142