남윤형

기본 클래스 구성 및 화면 디자인(사각형)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace flowchart
{
// flowchart를 그리는 판넬에 필요한 기능을 삽입. (Panel 객체를 상속해서 사용했음)
// 마우스 클릭을 놓으면 어떤 도형을 선택했는지 판단해서, 해당 자료구조를 생성하고, 페인트 함수를 통해 그린다.
class CustomPanel : Panel
{
private String _selectName;
private List<FigBase> _shapes = new List<FigBase>();
public string SelectName { get => _selectName; set => _selectName = value; }
protected override void OnMouseUp(MouseEventArgs e)
{
//MessageBox.Show("Added shape. " + SelectName + " " + e.Location.ToString());
if (SelectName == "RECTANGLE")
{
// 사각형에 대한 정보를 자료구조에 삽입한다.
FigRectangle rectangle = new FigRectangle(e.Location, new System.Drawing.Size(100, 100));
_shapes.Add(rectangle);
}
else if (SelectName == "ELLIPSE")
{
// TODO : 원 그리기
}
else if (SelectName == "TRIANGLE")
{
// TODO : 삼각형 그리기
}
this.Cursor = Cursors.Default;
this.Refresh(); // 다시 그리기 요청
base.OnMouseUp(e);
}
// 실제 그리는 OnPaint를 통해 내가 작성한 Draw함수를 호출한다.
protected override void OnPaint(PaintEventArgs e)
{
foreach (FigBase s in _shapes)
{
s.Draw(e.Graphics);
}
base.OnPaint(e);
}
}
}
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace flowchart
{
// flowchart 도형을 그리는 클래스의 공통(부모 클래스)
// 변수: 위치(_location), 크기(_size)
// 함수: 그리기(Draw)
class FigBase
{
private Point _location; // 위치 변수
private Size _size; // 크기 변수
protected FigBase(Point location, Size size) // 생성자 (위치와 크기를 저장)
{
_location = location;
_size = size;
}
// 위치와 크기 변수의 값을 읽고 쓰는 함수
public Point Location { get => _location; set => _location = value; }
public Size Size { get => _size; set => _size = value; }
// 자식 클래스에 필요한 공통 함수
public virtual void Draw(Graphics g)
{
}
}
}
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace flowchart
{
// 프로세스 사각형을 그리는 클래스(FigureBase를 상속)
// Draw 함수에서 사각형을 그린다.
class FigRectangle : FigBase
{
// 생성자도 상속해서 사용.
public FigRectangle(Point location, Size size) : base(location, size)
{
}
public override void Draw(Graphics g)
{
using (Pen pen = new Pen(Color.Red, 1))
{
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(this.Location, this.Size);
g.DrawRectangle(pen, rect); // 사각형 그리는 함수
}
base.Draw(g);
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace flowchart
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btn_rec_Click(object sender, EventArgs e)
{
CustomPanel.SelectName = "RECTANGLE";
CustomPanel.Cursor = Cursors.Hand;
}
private void btn_default_Click(object sender, EventArgs e)
{
CustomPanel.SelectName = "NONE";
CustomPanel.Cursor = Cursors.Default;
}
}
}