彩票走势图

流程图控件FlowChart.NET使用教程:设置命令类的子类

原创|使用教程|编辑:郝浩|2013-05-24 10:48:00.000|阅读 382 次

概述:FlowChart.NET是一个通用的流程图控件,提供了用于创建或编辑图表的直观的用户交互模型。详解一下通过设置命令类的子类,来调用 FlowChart.NET的撤销功能

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

   FlowChart.NET可以成为用户的应用程序的数据模型的一部分,对于本地的数据可以实现撤销/重做功能。想要集成程序的撤销功能到应用程序的撤销机制的话,需要使用到ActionRecorded事件。当引发该事件后,添加相应的包装记录到来自事件处理程序的应用程序的历史中,Wrapper就会调用撤销和重做的UndoManager方法。在这种情况下,就可以确保FlowChart.NET历史了容量和应用程序的是一样大的。

    另一种方法来调用 FlowChart.NET的撤销功能可以通过设置命令类的子类,以及对应用程序的数据改变创建类。当外部关系图中发生了更改时,它可以通过调用关系图的ExecuteCommand 方法来记录,以及集成到FlowChart.NET的历史记录。

    当你使用复杂对象来作为标记或是在ControlNode 实例中嵌入控件,来设置命令类的子类时,更改这些对象或控件的操作不能够检测到,也不能够通过FlowChart.NET自动处理。想要集成一个这样的操作到流程图的撤销历史中,必须创建一个懂地如何进行、 撤消或恢复操作的命令实例。

    命令子类必须是完全可实现执行,撤消和重做方法。通过你的子类所呈现出来的操作,通过执行流程的ExecuteCommand方法必须要可以实施。ExecuteCommand调用​​执行命令作为参数传递,然后将其添加到历史队列,通过撤销管理器撤销和重做的方法也可以被调用多次。通常情况下,你可以调用执行来实现重做,但是如果后者比较费时,其结果状态可以保存在实例成员中,以及通过重做来恢复。

    不要直接调用你类的撤销和重做方法,只是实现他们,当在必要的时候,它们将会通过UndoManager的撤消或重做的方法调用。

    下面的示例显示了一个简单的命令方法的实现:

C#

public class PersonTag
{
    public string Name;
    public string Address;

    // And so on
    ...
}

public class AddressChangeCmd : Command
{
    public AddressChangeCmd(PersonTag p, string address) :
        base("Address change")
    {
        this.p = p;
        this.oldAddress = p.Address;
        this.newAddress = address;
    }

    public override void Execute(bool undoEnabled)
    {
        p.Address = newAddress;
    }

    public override void Undo()
    {
        p.Address = oldAddress;
    }

    public override void Redo()
    {
        // Undo manager is enabled if Redo is called
        // so pass true for the undoEnabled argument
        Execute(true);
    }

    private PersonTag p;
    private string oldAddress;
    private string newAddress;
}

...

// Somewhere in later code
PersonTag tag = (PersonTag)diagram. ActiveItem.Tag;
AddressChangeCmd cc = new AddressChangeCmd(tag, "far far away");
diagram.ExecuteCommand(cc);

Visual Basic

Public Class PersonTag

    Public Name As String
    Public Address As String

    ' And so on
    ...

End Class

Public Class AddressChangeCmd
    Inherits Command

    Public Sub New(ByVal p As PersonTag, ByVal address As String)

        MyBase.New("Address change")

        Me.p = p
        Me.oldAddress = p.Address
        Me.newAddress = address

    End Sub

    Protected Overrides Sub Execute(ByVal undoEnabled As Boolean)

        p.Address = newAddress

    End Sub

    Protected Overrides Sub Undo()

        p.Address = oldAddress

    End Sub

    Protected Overrides Sub Redo()

        ' Undo manager is enabled if Redo is called
        ' so pass true for the undoEnabled argument
        Execute(True)

    End Sub

    Private p As PersonTag
    Private oldAddress As String
    Private newAddress As String

End Class

...

' Somewhere in later code
Dim tag As PersonTag = CType(diagram.ActiveItem.Tag, PersonTag)
Dim cc As AddressChangeCmd = New AddressChangeCmd(tag, "far far away")
diagram.ExecuteCommand(cc)

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:慧都控件

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP