⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cs

📁 一个C#加上flowchart控件的例程
💻 CS
📖 第 1 页 / 共 4 页
字号:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using MindFusion.FlowChartX;

namespace FlowCharter
{
	/// <summary>
	/// Summary description for MainForm.
	/// </summary>
	public class MainForm : System.Windows.Forms.Form
	{
		private class NodeProps
		{
			[Category("Properties")]
			[Description("The text displayed within the node.")]
			public string Text
			{
				get { return _text; }
				set { _text = value; }
			}
			[Category("Properties")]
			[Description("The font of the node's text.")]
			public Font Font
			{
				get { return _font; }
				set { _font = value; }
			}
			[Category("Properties")]
			[Description("The interior color of the node.")]
			public Color FillColor
			{
				get { return _fillColor; }
				set { _fillColor = value; }
			}

			private string _text;
			private Font _font;
			private Color _fillColor;
		}

		private class NodeDragItem
		{
			public NodeDragItem(int index)
			{
				this._index = index;
			}
			
			public static System.Type _GetType()
			{
				return new NodeDragItem(0).GetType();
			}

			public int Index
			{
				get
				{
					return _index;
				}
			}

			private int _index;
		}

		private class Node
		{
			public Node(AnchorPattern anchor,
				ShapeTemplate template, string name)
			{
				_anchor = anchor;
				_template = template;
				_name = name;
			}

			public AnchorPattern Anchor
			{
				get { return _anchor; }
			}
			public ShapeTemplate Template
			{
				get { return _template; }
			}
			public string Name
			{
				get { return _name ; }
			}

			private AnchorPattern _anchor;
			private ShapeTemplate _template;
			private string _name;
		}

		private class Connector
		{
			public Connector(EArrowHead head, string name)
			{
				_head = head;
				_name = name;
			}

			public EArrowHead Head
			{
				get { return _head; }
			}
			public string Name
			{
				get { return _name; }
			}

			private EArrowHead _head;
			private string _name;
		}

		// Data
		private static Node[] _nodes = null;
		private static Connector[] _connectors = null;

		private NodeProps _selected = null;

		private Color _anchorColor = Color.Red;
		private EMarkStyle _anchorStyle = EMarkStyle.msCircle;


		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.Windows.Forms.MainMenu _mainMenu;
		private System.Windows.Forms.MenuItem _menuItemFile;
		private System.Windows.Forms.MenuItem _menuItemNew;
		private System.Windows.Forms.MenuItem _menuItemOpen;
		private System.Windows.Forms.MenuItem _menuItemSave;
		private System.Windows.Forms.MenuItem _menuItemSep1;
		private System.Windows.Forms.MenuItem _menuItemPreview;
		private System.Windows.Forms.MenuItem _menuItemPrint;
		private System.Windows.Forms.MenuItem _menuItemSep2;
		private System.Windows.Forms.MenuItem _menuItemExit;
		private System.Windows.Forms.MenuItem _menuItemHelp;
		private System.Windows.Forms.MenuItem _menuItemAbout;
		private System.Windows.Forms.MenuItem _menuItemTools;
		private System.Windows.Forms.MenuItem _menuItemOptions;
		private System.Windows.Forms.Panel _borderPanel;
		private MindFusion.FlowChartX.FlowChart _flowChart;
		private System.ComponentModel.Container components = null;
		private System.Windows.Forms.Panel _rightPanel;
		private System.Windows.Forms.TabControl _tab;
		private System.Windows.Forms.Splitter _splitter2;
		private System.Windows.Forms.TabPage _tabNodes;
		private System.Windows.Forms.TabPage _tabConnectors;
		private System.Windows.Forms.PropertyGrid _propertyGrid;
		private System.Windows.Forms.ListBox _nodeList;
		private System.Windows.Forms.ComboBox _connectorTypeCombo;
		private System.Windows.Forms.ListBox _connectorList;
		private System.Windows.Forms.OpenFileDialog _openFileDialog;
		private System.Windows.Forms.SaveFileDialog _saveFileDialog;
		private System.Windows.Forms.ContextMenu _contextMenu;
		private System.Windows.Forms.MenuItem _menuItemDelete;
		private System.Windows.Forms.MenuItem _menuEdit;
		private System.Windows.Forms.MenuItem _menuUndo;
		private System.Windows.Forms.MenuItem _menuRedo;
		private System.Windows.Forms.Panel panel1;
		private MindFusion.FlowChartX.FlowChart _hidden;

		public MainForm()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			// _flowChart.UndoManager.UndoEnabled = true;
			// _flowChart.UndoManager.History.Capacity = 30;

			Color defAnch = Color.Red;

			_nodes = new Node[]
			{
				new Node(
					new AnchorPattern(new AnchorPoint[]
					{
						new AnchorPoint( 50,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100, 100, true, true, EMarkStyle.msCircle, defAnch)
					}),
					ShapeTemplate.FromId("Alternative"),	// get shape by string id
					"1三角"),
				new Node(
					new AnchorPattern(new AnchorPoint[]
					{
						new AnchorPoint( 30,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  30, true, true, EMarkStyle.msCircle, defAnch)
					}),
					ShapeTemplate.FromId("PunchedCard"),
					"2三角"),
				new Node(
					AnchorPattern.Decision2In2Out,
					ShapeTemplate.FromId("Decision"),
					"3三角"),
				new Node(
					new AnchorPattern(new AnchorPoint[]
					{
						new AnchorPoint(  0,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  50, true, true, EMarkStyle.msCircle, defAnch)
					}),
					ShapeTemplate.FromId("Delay"),
					"4三角"),
				new Node(
					new AnchorPattern(new AnchorPoint[]
					{
						new AnchorPoint( 15,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 85,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 85, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 15, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  50, true, true, EMarkStyle.msCircle, defAnch)
					}),
					ShapeTemplate.DirectData,	// obsolete, predefined shapes were available as static properties in previous FC.NET versions
					"5三角"),
				new Node(
				new AnchorPattern(new AnchorPoint[]
					{
						new AnchorPoint( 50,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  20, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  80, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  80, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  20, true, true, EMarkStyle.msCircle, defAnch)
					}),
					ShapeTemplate.FromId("DiskStorage"),
					"6三角"),
				new Node(
					new AnchorPattern(new AnchorPoint[]
					{
						new AnchorPoint( 40,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 85,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 85, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 40, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  50, true, true, EMarkStyle.msCircle, defAnch)
					}),
					ShapeTemplate.FromId("Display"),
					"7三角"),
				new Node(
					new AnchorPattern(new AnchorPoint[]
					{
						new AnchorPoint( 50,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  50, true, true, EMarkStyle.msCircle, defAnch)
					}),
					ShapeTemplate.FromId("DividedEvent"),
					"8三角"),
				new Node(
					new AnchorPattern(new AnchorPoint[]
					{
						new AnchorPoint(  0,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,   0, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100,  50, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(100, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint( 50, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0, 100, true, true, EMarkStyle.msCircle, defAnch),
						new AnchorPoint(  0,  50, true, true, EMarkStyle.msCircle, defAnch)
					}),
					ShapeTemplate.FromId("DividedProcess"),
					"9三角")
			};
			foreach(Node s in _nodes)
				_nodeList.Items.Add(s.Name);

			_connectors = new Connector[]
			{
				new Connector(
					EArrowHead.ahArrow,
					"Arrow"),
				new Connector(
					EArrowHead.ahBackSlash,
					"Back slash"),
				new Connector(
					EArrowHead.ahBowArrow,
					"Bow arrow"),
				new Connector(
					EArrowHead.ahCircle,
					"Circle"),
				new Connector(
					EArrowHead.ahDoubleArrow,
					"Double arrow"),
				new Connector(
					EArrowHead.ahNone,
					"None"),
				new Connector(
					EArrowHead.ahPentagon,
					"Pentagon"),
				new Connector(
					EArrowHead.ahPointerArrow,
					"Pointer"),
				new Connector(
					EArrowHead.ahQuill,
					"Quill"),
				new Connector(
					EArrowHead.ahReversed,
					"Reversed"),
				new Connector(
					EArrowHead.ahRevTriangle,
					"Reversed triangle"),
				new Connector(
					EArrowHead.ahRevWithCirc,
					"Reversed with Circle"),
				new Connector(
					EArrowHead.ahRevWithLine,
					"Reversed with Line"),
				new Connector(
					EArrowHead.ahRhombus,
					"Rhombus"),
				new Connector(
					EArrowHead.ahSlash,
					"Slash"),
				new Connector(
					EArrowHead.ahTetragon,
					"Tetragon"),
				new Connector(
					EArrowHead.ahTriangle,
					"Triangle")
			};
			foreach(Connector c in _connectors)
				_connectorList.Items.Add(c.Name);

			_nodeList.SelectedIndex = 0;
			_connectorList.SelectedIndex = 0;
			_connectorTypeCombo.SelectedIndex = 0;

			// Set-up the hidden chart
			_hidden.DocExtents = new RectangleF(0, 0, 50, 50);
			_hidden.RestrObjsToDoc = ERestrictToDoc.rdNoRestriction;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -