728x90
반응형
728x170
▶ MainForm.cs
using System;
using System.Drawing;
using System.Windows.Forms;
using Steema.TeeChart;
using Steema.TeeChart.Drawing;
using Steema.TeeChart.Styles;
using Steema.TeeChart.Tools;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 라인
/// </summary>
private Line line;
/// <summary>
/// 셀렉터
/// </summary>
private Selector selector;
/// <summary>
/// 현재 선택
/// </summary>
private object currentSelection;
/// <summary>
/// 임시 제목
/// </summary>
private Title temporaryTitle;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
Text = "ICloneable 구현을 사용해 객체 복사하기";
this.tChart.Panel.Pen = new ChartPen(Color.Black);
this.tChart.Axes.Bottom.Grid.Visible = false;
this.tChart.Axes.Left.Grid.Visible = false;
this.line = new Line(this.tChart.Chart);
this.line.FillSampleValues();
Annotation annotation = new Annotation(this.tChart.Chart);
annotation.Text = "객체 선택 후 CTRL+V 키를 눌러주시기 바랍니다.";
annotation.Position = AnnotationPositions.LeftTop;
this.selector = new Selector(this.tChart.Chart);
this.selector.AllowDrag = false;
this.tChart.KeyDown += tChart_KeyDown;
this.tChart.AfterDraw += tChart_AfterDraw;
this.selector.Selected += selector_Selected;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region TChart 키 DOWN 처리하기 - tChart_KeyDown(sender, e)
/// <summary>
/// TChart 키 DOWN 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void tChart_KeyDown(object sender, KeyEventArgs e)
{
Annotation temporaryAnnotation;
Series temporarySeries;
Axis temporaryAxis;
if(e.Control == true && e.KeyCode == Keys.V)
{
if(this.currentSelection is ICloneable)
{
if(this.currentSelection is Annotation)
{
temporaryAnnotation = (this.currentSelection as ICloneable).Clone() as Annotation;
temporaryAnnotation.Shape.CustomPosition = true;
temporaryAnnotation.Left = temporaryAnnotation.Left + 50;
temporaryAnnotation.Top = temporaryAnnotation.Top + 50;
this.tChart.Invalidate();
}
else if(this.currentSelection is Series)
{
temporarySeries = (this.currentSelection as ICloneable).Clone() as Series;
for(int i = 0; i < temporarySeries.Count; i++)
{
temporarySeries.XValues[i] = temporarySeries.XValues[i] + 1;
}
temporarySeries.Invalidate();
}
else if(this.currentSelection is Axis)
{
temporaryAxis = (this.currentSelection as ICloneable).Clone() as Axis;
this.tChart.Axes.Custom.Add(temporaryAxis);
temporaryAxis.RelativePosition = temporaryAxis.RelativePosition + 10;
if(temporaryAxis.Horizontal)
{
this.line.CustomHorizAxis = temporaryAxis;
}
else
{
this.line.CustomVertAxis = temporaryAxis;
}
}
else if(this.currentSelection is Title)
{
temporaryTitle = (this.currentSelection as ICloneable).Clone() as Title;
temporaryTitle.Top = temporaryTitle.Top + 20;
this.tChart.Invalidate();
}
else if(this.currentSelection is Legend)
{
ExtraLegend extraLegend = new ExtraLegend(this.tChart.Chart);
extraLegend.Series = this.line;
extraLegend.Legend = this.currentSelection as Legend;
extraLegend.Legend.Left = this.tChart.Legend.Left - 50;
}
}
}
}
#endregion
#region TChart 그리기 후 처리하기 - tChart_AfterDraw(sender, graphics3D)
/// <summary>
/// TChart 그리기 후 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="graphics3D">그래픽스 3D</param>
private void tChart_AfterDraw(object sender, Graphics3D graphics3D)
{
if(this.temporaryTitle != null)
{
this.temporaryTitle.CustomPosition = true;
Rectangle chartRectangle = this.tChart.Chart.ChartRect;
this.temporaryTitle.DoDraw(graphics3D, ref chartRectangle, true, "제목");
}
}
#endregion
#region 셀렉터 선택시 처리하기 - selector_Selected(sender, e)
/// <summary>
/// 셀렉터 선택시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void selector_Selected(object sender, EventArgs e)
{
this.currentSelection = this.selector.Selection;
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'TeeChart > WinForm' 카테고리의 다른 글
[TEECHART/WINFORM] Add 클래스 : Period 속성 사용하기 (0) | 2022.04.14 |
---|---|
[TEECHART/WINFORM] Surface 클래스 : 3D 원통 만들기 (0) | 2022.04.08 |
[TEECHART/WINFORM] Graphics3D 클래스 : PyramidTrunc 속성을 사용해 잘라진 피라미드 그리기 (0) | 2022.04.07 |
[TEECHART/WINFORM] Graphics3D 클래스 : Ellipse 메소드 사용하기 (0) | 2022.04.07 |
[TEECHART/WINFORM] Graphics3D 클래스 : RotationCenter 속성을 사용해 회전 중심 설정하기 (0) | 2022.04.07 |
[TEECHART/WINFORM] TChart 클래스 : Aspect 속성을 사용해 직교 각도 설정하기 (0) | 2022.04.07 |
[TEECHART/WINFORM] HTML 텍스트 사용하기 (0) | 2022.04.06 |
[TEECHART/WINFORM] Gradient 클래스 : MiddleColor 속성을 사용해 중간 색상 설정하기 (0) | 2022.04.06 |
[TEECHART/WINFORM] 폰트 품질 설정하기 (0) | 2022.04.06 |
[TEECHART/WINFORM] Gradient 클래스 : 커스텀 그라디언트 사용하기 (0) | 2022.04.06 |
댓글을 달아 주세요