F015에서 만들었던 차트는 한 개의 차트 컨트롤에 한 개의 차트 영역과 시리즈가 있도록 만들었다.
이번에는 한 개의 차트 컨트롤에 여러 개의 차트 영역과 시리즈를 가질 수 있는 것을 만들었다.
프로그램이 실행 되면 두 개의 차트 영역에 두 개의 시리즈가 표시되고 하단에는 버튼이 두 개(합쳐서 그리기, 나누어 그리기)가 존재한다. 이 두 개의 버튼은 말 그대로 합쳐서 그리기를 클릭하면 두 개의 시리즈가 하나의 차트 영역에 표시되게 하고 나누어 그리기를 클릭하면 처음과 같은 형태로 그려지게 된다.
첫 번째로 윈 폼에 차트 컨트롤을 집어 넣어준다.
이 때 다른 설정은 건들지 않아도 된다.
버튼 두 개를 생성해 주고선 각각 텍스트에 합쳐서 그리기, 나누어 그리기를 입력해준다.
합쳐서 그리기의 Name은 btnOnechartArea으로 바꾸어 주고
나누어 그리기의 Name은 btnTwoChartArea으로 바꾸어 준다.
다음과 같이 만들면 된다.
두 번째로 폼 타이틀 바에 보이는 글자를 바꾸어 준다.
public Form1()
{
InitializeComponent();
this.Text = "Using Cnart Control 2";
}
Form1_Load() 메소드에 실행할 것들을 추가해 준다.
chart1의 제목을 "중간고사 성적"으로 해준다.
chart1.Titles.Add("중간고사성적");
chart1 에는 디폴트로 "Series1"이라는 시리즈가 있기에 "Series2"라는 이름의 시리즈를 추가한다.
시리즈의 이름은 상수이며 원하는대로 쓸 수 있다.
chart1.Series.Add("Series2");
"Series1"은 수학, "Series2"는 영어라고 범례를 정한다.
chart1.Series["Series1"].LegendText = "수학";
chart1.Series["Series2"].LegendText = "영어";
차트 영역을 추가해준다.
이 또한 시리즈와 마찬가지로 디폴트 값인 "ChartArea1" 있기에 "ChartArea2"추가해준다.
chart1.ChartAreas.Add("ChartArea2");
"Series2"의 차트 영역을 "ChartArea2"로 지정한다.
영어 점수는 두 번째 차트 영역에 보이게 지정하는 것이다.
chart1.Series["Series2"].ChartArea = "ChartArea2";
저번과 마찬가지로 랜덤으로 난수를 생성하고
두 개의 시리즈에 백 점까지의 랜덤 점수를 추가한다.
Random r = new Random();
for(int i = 0; i < 10; i++)
{
chart1.Series["Series1"].Points.Add(r.Next(100));
chart1.Series["Series2"].Points.Add(r.Next(100));
}
여기까지 하면 Form1_Load() 메소드안에서 실행할 것들이 다 써졌다.
Form1_Load() 메소드의 최종 코드는 다음과 같다.
private void Form1_Load(object sender, EventArgs e)
{
chart1.Titles.Add("중간고사성적");
chart1.Series.Add("Series2");
chart1.Series["Series1"].LegendText = "수학";
chart1.Series["Series2"].LegendText = "영어";
chart1.ChartAreas.Add("ChartArea2");
chart1.Series["Series2"].ChartArea = "ChartArea2";
Random r = new Random();
for(int i = 0; i < 10; i++)
{
chart1.Series["Series1"].Points.Add(r.Next(100));
chart1.Series["Series2"].Points.Add(r.Next(100));
}
}
세 번째로 버튼을 클릭 했을 때 합쳐서 그리기를 나타내준다.
윈폼에서 만들어 두었던 합쳐서 그리기 버튼을 더블 클릭해 btnOnechartArea_Click() 메소드를 추가해준다.
btnOnechartArea_Click() 메소드에
"ChartArea2"를 삭제하고
"Series2"가 "ChartArea1"에 표시되게 한다.
private void btnOnechartArea_Click(object sender, EventArgs e)
{
chart1.ChartAreas.RemoveAt
(chart1.ChartAreas.IndexOf("ChartArea2"));
chart1.Series["Series2"].ChartArea = "ChartArea1";
}
나누어 그리기 버튼을 클릭했을 때는
"ChartArea2"를 추가하고
"Series2"가 "ChartArea2"에 표시되게 만들어준다.
private void btnTwoChartArea_Click(object sender, EventArgs e)
{
chart1.ChartAreas.Add("ChartArea2");
chart1.Series["Series2"].ChartArea = "ChartArea2";
}
다음은 최종 코드이다.
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 F016_TwoChart
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Text = "Using Cnart Control 2";
}
private void Form1_Load(object sender, EventArgs e)
{
chart1.Titles.Add("중간고사성적");
chart1.Series.Add("Series2");
chart1.Series["Series1"].LegendText = "수학";
chart1.Series["Series2"].LegendText = "영어";
chart1.ChartAreas.Add("ChartArea2");
chart1.Series["Series2"].ChartArea = "ChartArea2";
Random r = new Random();
for(int i = 0; i < 10; i++)
{
chart1.Series["Series1"].Points.Add(r.Next(100));
chart1.Series["Series2"].Points.Add(r.Next(100));
}
}
//합쳐서 그리기
private void btnOnechartArea_Click(object sender, EventArgs e)
{
chart1.ChartAreas.RemoveAt
(chart1.ChartAreas.IndexOf("ChartArea2"));
chart1.Series["Series2"].ChartArea = "ChartArea1";
}
//나누어 그리기
private void btnTwoChartArea_Click(object sender, EventArgs e)
{
chart1.ChartAreas.Add("ChartArea2");
chart1.Series["Series2"].ChartArea = "ChartArea2";
}
}
}
'C# > Basics' 카테고리의 다른 글
F018_PhoneBook (0) | 2021.06.09 |
---|---|
F017_GraphUsingChart (0) | 2021.06.09 |
F015_Chart (0) | 2021.06.08 |
W014. WindowsCalc (0) | 2021.04.25 |
W013. Event (0) | 2021.04.25 |