■ AddFlow 클래스에서 XML 직렬화/역직렬화하는 방법을 보여준다.
▶ MainForm.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
using System; using System.Drawing; using System.IO; using System.Xml; using System.Windows.Forms; using Lassalle.Flow; namespace TestProject { /// <summary> /// 메인 폼 /// </summary> public partial class MainForm : Form { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainForm() /// <summary> /// 생성자 /// </summary> public MainForm() { InitializeComponent(); CreateDiagram(this.addFlow); this.serializeButton.Click += serializeButton_Click; this.deserializeButton.Click += deserializeButton_Click; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region Serialize 버튼 클릭시 처리하기 - serializeButton_Click(sender, e) /// <summary> /// Serialize 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void serializeButton_Click(object sender, EventArgs e) { SaveFile(this.addFlow, "c:\\AddFlow.xml"); } #endregion #region Deserialize 버튼 클릭시 처리하기 - deserializeButton_Click(sender, e) /// <summary> /// Deserialize 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void deserializeButton_Click(object sender, EventArgs e) { LoadFile(this.addFlow, "c:\\AddFlow.xml"); } #endregion //////////////////////////////////////////////////////////////////////////////// Function #region 다이어그램 생성하기 - CreateDiagram(addFlow) /// <summary> /// 다이어그램 생성하기 /// </summary> /// <param name="addFlow">AddFlow</param> private void CreateDiagram(AddFlow addFlow) { Node defaultNode = new Node(0, 0, 0, 0, null, addFlow); Link defaultLink = new Link(null, null, null, addFlow); Caption defaultCaption = new Caption(0, 0, 0, 0, null, null, addFlow); // 노드들을 위한 디폴트 속성 값들을 설정한다. defaultNode.FillColor = Color.LightYellow; defaultNode.ShadowStyle = ShadowStyle.RightBottom; // 링크들을 위한 디폴트 속성 값들을 설정한다. defaultLink.DrawColor = Color.Blue; defaultLink.BackMode = BackMode.Opaque; // 캡션들을 위한 디폴트 속성 값들을 설정한다. defaultCaption.TextColor = Color.Blue; defaultCaption.DrawColor = Color.Transparent; defaultCaption.Font = new Font("Calibri", 14); // 그림자를 갖는 3개의 노랑색 노드들을 생성한다. // 두번째 노드는 사각형이고 // 세번째 노드는 Document 도형 스타일을 갖는다. Node node1 = new Node(50 , 70 , 80 , 80, "첫번째 노드", defaultNode); Node node2 = new Node(280, 180, 100, 80, "두번째 노드", defaultNode); Node node3 = new Node(50 , 230, 80 , 80, "세번째 노드", defaultNode); node2.ShapeFamily = ShapeFamily.Rectangle; node3.ShapeFamily = ShapeFamily.Rectangle; node3.GraphicsPath = PredefinedGeometry.GetNodePath(NodeShapeStyle.Document, ShapeOrientation.Degree0); // 3개의 링크들을 생성한다. // 각 링크는 파랑색이고 BackMode 속성은 Opaque로 설정한다. // 두번째 링크는 베지어 스타일을 갖고, 텍스트 색상은 빨강색이고, 목적지 화살표 각도는 30도 이다. // 세번째 링크는 HVH 스타일이다. Link link1 = new Link(node1, node2, "링크 1", defaultLink); Link link2 = new Link(node2, node2, "링크 2", defaultLink); Link link3 = new Link(node2, node3, "링크 3", defaultLink); link2.LineStyle = LineStyle.Bezier; link2.TextColor = Color.Red; link2.ArrowDst = PredefinedGeometry.GetLinkArrowStylePath(LinkArrowStyle.Arrow, 10, 14); link3.LineStyle = LineStyle.Orthogonal; // 1개의 캡션을 생성한다. Caption caption = new Caption(200, 30, 220, 30, "XML 직렬화/역직렬화", null, defaultCaption); // 다이어그램에 노드들과 링크들 및 캡션을 추가한다. addFlow.AddNode(node1); addFlow.AddNode(node2); addFlow.AddNode(node3); addFlow.AddLink(link1); addFlow.AddLink(link2); addFlow.AddLink(link3); addFlow.AddCaption(caption); // 첫번째 링크에 2개의 포인트들을 추가한다. link1.AddPoint(new PointF(90 , 200)); link1.AddPoint(new PointF(220, 60 )); // 재귀적 링크를 늘린다. link2.SetPoint(new PointF(280, 70), 1); link2.SetPoint(new PointF(420, 70), 2); } #endregion #region 파일 로드하기 - LoadFile(addFlow, filePath) /// <summary> /// 파일 로드하기 /// </summary> /// <param name="addFlow">AddFlow</param> /// <param name="filePath">파일 경로</param> private void LoadFile(AddFlow addFlow, string filePath) { addFlow.Clear(); FileStream fileStream = new FileStream(filePath, FileMode.Open); XmlTextReader xmlTextReader = new XmlTextReader(fileStream); AddFlowHelper.Deserialize(xmlTextReader, addFlow); fileStream.Close(); } #endregion #region 파일 저장하기 - SaveFile(addFlow) /// <summary> /// 파일 저장하기 /// </summary> /// <param name="addFlow">AddFlow</param> /// <param name="filePath">파일 경로</param> private void SaveFile(AddFlow addFlow, string filePath) { FileStream fileStream = new FileStream(filePath, FileMode.Create); XmlTextWriter xmlTextWriter = new XmlTextWriter(fileStream, null); AddFlowHelper.Searialize(xmlTextWriter, addFlow); fileStream.Close(); addFlow.ResetChangedFlag(); } #endregion } } |