创建流程图 C#

流程图是一种强大的可视化工具,可用于表示流程和工作流。在这篇博文中,我们将探讨如何在 C# 中创建流程图。无论您是构建复杂的应用程序还是只需要可视化简单的流程,当您需要与相关受众共享信息时,创建流程图都会很有用。

为什么要创建流程图?

制作流程图有很多好处。例如:

自动化文档:根据代码或配置文件自动生成流程图,确保文档的最新状态。

动态图表:创建动态、数据驱动的流程图,该流程图可以根据用户输入或其他变量实时改变。

集成:在您的应用程序中嵌入流程图,允许用户直接在软件内与其交互并操作它们。

流程图生成器 - C# API 安装

要遵循本教程,您需要配置 Visual Studio IDE,并使用以下 NuGet 安装命令安装 Conholdate.Total for .NET 来准备环境:

PM> NuGet\Install-Package Conholdate.Total

使用 C# 制作流程图

您可以学习通过添加一些形状和连接器在 C# 中创建流程图:

  • 首先创建流程图的架构。
  • 加载母版以使用 Diagram 类添加形状。
  • 根据架构添加形状和连接器。
  • 安排流程图的布局。
  • 最后,使用Save方法将流程图保存为VSDX文件。

下面的示例代码展示了如何在 C# 中生成流程图:

namespace CreateFlowchart
{
    class Program
    {
        static void Main(string[] args)
        {
            //要创建的图表的架构
            Input diagramObject = new Input()
            {
                InputRectangles = new List<InputRectangle>() {
                        new InputRectangle() {
                            Name = "A",
                            Text = "Manager"
                        },
                        new InputRectangle() {
                            Name = "B",
                            Text = "Team Leader"
                        },
                        new InputRectangle() {
                            Name = "C",
                            Text = "Team Member"
                        },
                        new InputRectangle() {
                            Name = "D",
                            Text = "Team Member"
                        },
                        new InputRectangle() {
                            Name = "E",
                            Text = "Team Member"
                        }
                    },
                InputConnectors = new List<InputConnector>() {
                        new InputConnector() {
                            OriginShapeName = "A",
                            DestinationShapeName = "B"
                        },
                        new InputConnector() {
                            OriginShapeName = "B",
                            DestinationShapeName = "C"
                        },
                        new InputConnector() {
                            OriginShapeName = "B",
                            DestinationShapeName = "D"
                        },
                        new InputConnector() {
                            OriginShapeName = "B",
                            DestinationShapeName = "E"
                        }
                    }
            };

            Diagram diagram = new Diagram("BasicShapes.vss");
            Page page = diagram.Pages[0];

            Dictionary<string, long> shapeNames = new Dictionary<string, long>();

            //从架构中添加形状和连接器
            foreach (var rectangle in diagramObject.InputRectangles)
            {
                Shape shape = new Shape();
                var shapeId = diagram.AddShape(shape, @"Rectangle", 0);
                shapeNames.Add(rectangle.Name, shapeId);
                shape = page.Shapes.GetShape(shapeId);
                shape.Text.Value.Add(new Txt(rectangle.Text));
            }


            foreach (var connector in diagramObject.InputConnectors)
            {
                var connectorId = diagram.AddShape(new Shape(), "Dynamic connector", 0);
                page.ConnectShapesViaConnector(shapeNames[connector.OriginShapeName],
                                                ConnectionPointPlace.Right,
                                                shapeNames[connector.DestinationShapeName],
                                                ConnectionPointPlace.Left,
                                                connectorId);
            }


            LayoutOptions layoutOptions = new LayoutOptions()
            {
                LayoutStyle = LayoutStyle.FlowChart,
                Direction = LayoutDirection.LeftToRight,
                SpaceShapes = 5,
                EnlargePage = true
            };

            diagram.Layout(layoutOptions);

            page.PageSheet.PrintProps.PrintPageOrientation.Value = PrintPageOrientationValue.Landscape;

            DiagramSaveOptions saveOptions = new DiagramSaveOptions()
            {
                SaveFormat = SaveFileFormat.Vsdx,
                AutoFitPageToDrawingContent = true
            };

            diagram.Save("output.vsdx", saveOptions);
        }
    }

    public class Input
    {
        public System.Collections.Generic.List<InputRectangle> InputRectangles { get; set; }
        public System.Collections.Generic.List<InputConnector> InputConnectors { get; set; }
    }

    public class InputRectangle
    {
        public string Name { get; set; }
        public string Text { get; set; }
    }

    public class InputConnector
    {
        public string OriginShapeName { get; set; }
        public string DestinationShapeName { get; set; }
    }
}

演示项目

您可以下载可用的 示例项目 来快速演示该功能。此外,还可以通过修改形状、连接、连接器等来进一步增强该功能,以测试不同的用例。

免费评估许可证

您可以获得免费临时许可证来全面测试 API。

加起来

使用 C# 以编程方式创建流程图是实现流程和工作流可视化的强大方法。借助所涵盖的类和方法调用,您可以快速生成动态和交互式流程图。我们希望本教程为您提供了坚实的基础,让您开始使用 C# 创建自己的流程图。如有任何疑问,请通过 forum 与我们联系。

常见问题解答

我可以使用附加形状和连接器创建更复杂的流程图吗?

是的,您可以根据需要创建任意数量的形状和连接器来表示任何流程。

我可以将流程图导出为图像或 PDF 吗?

是的,它支持将流程图导出为各种格式,包括图像和 PDF。

我可以向流程图添加自定义形状吗?

是的,您可以创建自定义形状。这样您就可以创建符合您特定需求的形状。

也可以看看