현재 진행중인 프로젝트에서 그래프가 필요해서 검색을 해봤더니....
다들 안에 있는 툴을 사용하거나 실시간 혹은 데이터 변경시 다시 그래프를 그려주는건 없다....
물론....
샅샅히 뒤져보진 않았지만..ㅡㅡㅋ
그래서 예전에 MFC에서 사용했던 기술(?)을 C#에 적용해봤는데.... 어랏!!!
된다....ㅡㅡㅋ
그래서 우선 올린다...
일단은 막대그래프만.... 꺽은선그래프도 만들수 있는데 고건 나중에... 지금 네턱쪽이 더 급하니..ㅠ.ㅠ
일단 윈폼예제를 만든다....
그리고 그 위에 패널1개와 버튼 1개를 그린다....
그리고 버튼에 클릭이벤트를 생성하고....
panel1.Invaildate(true); 요놈 추가
글고 panel1에서 페인트이벤트를 추가한 다음...
브러시랑 글씨 객체를 선언해서 그린다....
여기서 중요한건.... 이건 위치를 직접 지정해줘야하는거라서 약간의 노가다가 들어간다.. 그래서 like 노가다...ㅡㅡ;;;
아래는 panel1_paint에 들어갈 소스...
///////////////////////////////////////////////////////////////////////////////////////////
Graphics g = e.Graphics;
int xsize, ysize;
//panel10 사이즈 143, 150;
///그래프그리는 선
SolidBrush axisX = new SolidBrush(Color.Black);
SolidBrush axisY = new SolidBrush(Color.Black);
Font y_name = new Font(FontFamily.GenericSerif, 10F, FontStyle.Regular);
Font row = new Font(FontFamily.GenericSerif, 8F, FontStyle.Regular);
///데이터선.
SolidBrush meas1 = new SolidBrush(Color.Red);
SolidBrush meas2 = new SolidBrush(Color.Blue);
SolidBrush meas3 = new SolidBrush(Color.Cyan);
SolidBrush meas4 = new SolidBrush(Color.Yellow);
///그래프그리기
g.FillRectangle(axisY, 5, 5, 2, 125); //y축
g.FillRectangle(axisX, 5, 130, 125, 2); //x축
g.FillRectangle(axisX, 35, 125, 1, 10); //x축 표시
g.FillRectangle(axisX, 85, 125, 1, 10); //x축 표시
g.DrawString("x1", row, Brushes.Black, 25, 135);//x축
g.DrawString("x2", row, Brushes.Black, 75, 135);//y축
g.FillRectangle(meas3, 15, 130 - 15, 100, 2);//설정라인표시
g.FillRectangle(meas4, 15, 130 - 85, 100, 2);
g.DrawString("15", row, Brushes.Black, 120, 110);//설정 기준값
g.DrawString("85", row, Brushes.Black, 120, 40);//설정 기준값
if (cnt != 0)
{
if (cnt > 2)
{
buffx[0] = buffx[1];
buffy[0] = buffy[1];
buffx[1] = (cnt % 20) + 10;
buffy[1] = (cnt % 20) + 80;
}
else
{
buffx[cnt - 1] = (cnt % 20) + 10;
buffy[cnt - 1] = (cnt % 20) + 80;
}
///데이터 표시
if (cnt > 2)
{
g.FillRectangle(meas1, 25, 130 - buffx[0], 10, buffx[0]);//그래프그리기
g.FillRectangle(meas2, 35, 130 - buffy[0], 10, buffy[0]);
g.DrawString(buffx[0].ToString(), row, Brushes.Black, 10, 115 - buffx[0]);//값표시
g.DrawString(buffy[0].ToString(), row, Brushes.Black, 30, 115 - buffy[0]);
g.FillRectangle(meas1, 75, 130 - buffx[1], 10, buffx[1]);//그래프그리기
g.FillRectangle(meas2, 85, 130 - buffy[1], 10, buffy[1]);
g.DrawString(buffx[0].ToString(), row, Brushes.Black, 60, 115 - buffx[0]);//값표시
g.DrawString(buffy[0].ToString(), row, Brushes.Black, 80, 115 - buffy[0]);
}
else
{
for (int i = 0; i < cnt; i++)
{
g.FillRectangle(meas1, (i * 50) + 25, 130 - buffx[i], 10, buffx[i]); //그래프그리기
g.FillRectangle(meas2, (i * 50) + 35, 130 - buffy[i], 10, buffy[i]);
g.DrawString(buffx[i].ToString(), row, Brushes.Black, (i * 50) + 10, 115 - buffx[i]);//값표시
g.DrawString(buffy[i].ToString(), row, Brushes.Black, (i * 50) + 30, 115 - buffy[i]);
}
}
axisX.Dispose();
axisY.Dispose();
meas1.Dispose();
meas2.Dispose();
meas3.Dispose();
meas4.Dispose();
}
////////////////////////////////////////////////////////////////////////////////////////////////
중요한건 buffx랑 buffy는 int[]로 선언해주고 생성자에서 new로 int[4]할당...
글고 cnt는 선언할때 초기화해주던지 아님 생성자에서 초기화 해주고 버튼클릭이벤트에 cnt++;만 추가해주면됨...
요게 실행화면....
버튼 클릭할때마다 값과 그래프가 새로 그려진다...
아직 본인도 좋은 실력이 아닌지라 panel사이즈 얻어와서 하고 하면 좋긴한데... 고런건 우선은 패스!!!! 시간이 없응께..ㅡㅡ;;
암튼 이놈의 장점이자 단점은 x축 y축에 이름이나 인자값을 사용자가 지정해줄수 있다는점~~~~~
근데 그게 단점이라는 점~~~~ 일일이 맞춰야하니까;;;;
쨋든 좀더 자세하고 단순한 건 조만간 올리도록하겠음.. 더 보완해서 꺽은선까지...ㅋ
일단 그래프는 여기서...끝!!!!!
'공부 > C#' 카테고리의 다른 글
C# 텍스트박스 Textbox에 숫자만 입력받기 (0) | 2012.07.05 |
---|---|
C# 다이어로그(dialog) Show와 ShowDialog의 차이점. (2) | 2012.07.05 |
C# 기초공부2 (0) | 2012.06.01 |
C# 기초공부 1 (0) | 2012.05.25 |
C#프로젝트 만들기 (0) | 2012.05.25 |
댓글