甘特图控件VARCHART XGantt,Snap工具如何水平拖动!

291 阅读7分钟

VARCHART XGantt是一个交互式的甘特图控件,其模块化的设计让您可以创建满足您和您的客户所需求的应用程序。(我们领先的甘特图控件VARCHART XGantt可用于.NET,ActiveX和ASP.NET应用程序。)

甘特图使计划人员可以通过来回移动来轻松地重新计划订单、任务或资源。但是,将节点定位在时间轴的某个点或紧接另一个节点之后可能会很棘手,因为甘特图中的某个点必须被鼠标精确击中。

此外,在许多甘特图中,使用了多级组。在大型计划中,如果目标组的位置很远,则用鼠标将节点从一个组或其子组拖到另一个组有时,会带来一些不便和混乱。

Snap工具:支持水平拖动

许多拖动应用程序或设计工具已经提供了所谓的snapgrid,以帮助通过预定义的网格(通常以像素间隔)精确定位对象。 VARCHART XGantt现在提供了类似的功能。移动的对象未调整为固定网格,而是调整为图形中的其他对象,因此这些对象定义了具有不规则距离的网格。

节点(或其层)、日期行、行网格和日历网格允许定义所谓的snap目标。这意味着这些对象在其自身上定义了某些位置,用作其他对象的snap动作的目标。当水平移动节点或修改节点或图层的大小时,该节点或图层的开始或结束日期将按时间顺序调整为其他对象定义的snap工具。开始日期或结束日期将朝其附近5像素之内的快照目标移动,因此将接管目标的确切日期。

已为每个节点布局定义了特殊的行为(未分组、分组、分层排列;假定相应的对象定义了snap工具):

  • 所有节点布局:将要移动的层调整为日期行、行网格和日历网格。

  • 未分组的布局:将要移动的图层调整为所有节点的图层。

  • 分组布局:将要移动的层调整为一组(没有子组)节点的层。如果在交互过程中更改了组,则层将被调整为新组的对象。

  • 分层排列:将要移动的层调整为同一分支(带有子分支)的节点的层。如果在交互过程中更改了分支,则会将图层调整为新分支的对象。

  • 为了使snap工具生效,必须在“节点”属性页面上将其启用

    VARCHART XGantt用户手册:解读拖动工具(上)

  • API调用:vcGantt.UseSnapTargetsInInteractions = true / false

  • 可以在“编辑图层”对话框中将图层定义为snap目标。选中“开始snap目标”和“结束snap目标”复选框,将图层的位置(即日期)设置为拖动节点或图层的snap目标。

    VARCHART XGantt用户手册:解读拖动工具(上)

  • API调用:

    VcLayer.StartSnapTarget = true / false

    VcLayer.EndSnapTarget = true / false

  • 日期行可以在“指定日期行”对话框中定义为snap目标。勾选“snap目标”复选框,将日期行的位置(即日期)设置为捕捉节点或图层的snap目标。

    VARCHART XGantt用户手册:解读拖动工具(上)

  • API调用:VcDateLine.SnapTarget = true / false

snap目标LINE GRIDS / CALENDAR GRIDS

  • 行网格和日历网格可以在两个不同的位置定义为snap目标:

  • 在“编辑时间标度”部分中,没有单独的对象

  • 在单个、与组或节点的对象对话框下方。

选中“编辑时间标度”部分对话框中的相应复选框,将相关对象的位置(即它们的日期)设置为拖动节点或图层的snap目标。

VARCHART XGantt用户手册:解读拖动工具(上)

在“分组”对话框中,您可以访问“管理日历网格”和“管理行网格”对话框,其中勾选相应的复选框会将相关对象的位置(即它们的日期)设置为拖动节点或图层的snap目标。

VARCHART XGantt用户手册:解读拖动工具(上)

VARCHART XGantt用户手册:解读拖动工具(上)

API调用:

VcDateLineGrid.SnapTarget = true / false

VcCalendarGrid.StartSnapTarget = true / false

VcCalendarGrid.StartSnapTarget = true / false

请注意:由于在移动多个节点时混合所有对象(即来自多个功能区的对象)的snap目标没有意义,因此仅在移动单个节点时才考虑单个对象的snap目标。没有提供将节点单独snap到其所在的功能区的snap目标上的功能。

通过箭头键移动节点

节点不仅可以通过鼠标进行交互式移动,还可以通过键盘上的鼠标键进行移动。为此,需要以下设置:

vcGantt1.ArrowKeyMode = VcArrowKeyMode.vcResizeOrMoveNode

值vcNodeJumpToSnapTarget已添加到枚举VcArrowKeyMode。如果设置了此值,则按CTRL +向左或向右箭头键会导致标记的节点snap到下一个或最后一个snap目标,这是一个循环操作:如果到达终点,则一切都从起点开始。

自动折叠/展开:支持垂直拖动

每个人都已经在Windows资源管理器中移动了文件,并且知道了文件夹结构的自动扩展:将文件移动到折叠的文件夹中,不久后暂停鼠标,打开文件夹,然后可以进一步移动直到到达所需的文件夹。

旧版本中的行为

到目前为止,如果图表在多个扩展组中有许多节点,则在VARCHART XGantt中将一个节点垂直移动到另一个组时,搜索目标组可能会花费很多时间。在大多数情况下,需要自动垂直滚动才能到达目标人群,这有时很繁琐,因此也很不舒服。

新版本:易于定向和快速垂直拖动

新功能大大缩短了对目标人群的搜索。组合和设置选项非常多样,我们只想在此介绍一种可能的配置。

示例:折叠除当前组以外的所有组

VARCHART XGantt的一种可能配置是,在移动节点时,除刚触摸过的组之外的所有组都将折叠。如果仅在同一组内移动节点,则将保持该组的状态。通过折叠其他组,计划的垂直扩展减少到其原始大小的一小部分,从而允许显示比以前更多的组,理想情况下,目标组现在已经可见。如果不是,则VARCHART XGantt可以自动滚动折叠的组,以便比以前更快地找到目标组。到达目标组时,会暂停片刻,目标组会扩展,并且动作可以继续进行。之前被触摸过的组崩溃了,因此计划规模保持最小。拖动继续进行,也许是扩展到另一个组,该组在再次折叠之前已经扩展了,等等。直到到达目标。释放目标组中的节点后,交互完成,并且,如果需要,VARCHART XGantt可以还原原始节点。

条件,滚动到移动节点的新位置。

许多组合选项

这只是新功能的一个示例。还有其他可用选项:

组自动折叠

自动扩展组

自动还原自动折叠或展开的组,这种更新行为允许对该选项进行精确的时间控制。

这些设置可以按分组级别进行,也可以针对节点的层次结构进行,从而可以进行非常详细的拖动操作。

新属性和API调用

“编辑更新行为”对话框提供了八个相关的上下文,在“分组行布局”和“层次结构布局”中各有四个:

VARCHART XGantt用户手册:解读拖动工具(下)

枚举VcUpdateBehaviorContextType还具有8个新值,因此也可以在运行时设置新上下文。

VARCHART XGantt用户手册:解读拖动工具(下)

可以在“分组”对话框中启用或禁用由此上下文通过计时器激活的功能。

VARCHART XGantt用户手册:解读拖动工具(下)

API调用:

VcGroupLevelLayout.AutoCollapseGroups = true / false

VcGroupLevelLayout.AutoExpandTargetGroup = true / false

VcGroupLevelLayout.RestoreAutoCollapsedGroups = true / false

VcGroupLevelLayout.RestoreAutoExpandedGroups =true / false

VcHierarchyLevelLayout.AutoCollapseGroups = true / false

VcHierarchyLevelLayout.AutoExpandTargetGroup = true / false

VcHierarchyLevelLayout.RestoreAutoCollapsedGroups =true / false

VcHierarchyLevelLayout.RestoreAutoExpandedGroups =true / false