龙空技术网

「TeeChart Pro ActiveX教程」:图表面板上的自定义绘图(上)

慧都科技 191

前言:

今天你们对“用vbnet编写画图程序”大体比较着重,兄弟们都想要了解一些“用vbnet编写画图程序”的相关文章。那么小编在网摘上网罗了一些关于“用vbnet编写画图程序””的相关知识,希望各位老铁们能喜欢,兄弟们一起来了解一下吧!

TeeChart通过Canvas对象提供广泛的自定义绘图工具。使用Canvas,您可以在“Chart Panel”的任何位置添加形状,线条和文本,并定义其颜色,笔和画笔样式。

TeeChart画布

绘图顺序

使用TeeChart的Canvas方法时,请记住绘图顺序很重要。在图表上绘制一条线然后添加系列数据点将导致线透支。 有四个主要的图表绘制事件,按顺序排列:

BeforeDraw事件BeforeDrawAxes事件BeforeDrawSeries事件AfterDraw事件

[C#]

private bool afterDraw; private bool beforeDraw; private bool beforeDrawAxis; private bool beforeDrawSeries;  private void Form1_Load(object sender, System.EventArgs e) {  SetFlags(ref beforeDraw);  Bar bar1 = new Bar(tChart1.Chart);  bar1.FillSampleValues(20);  radioButton1.Checked = true; } private void SetFlags(ref bool Flag) {  beforeDraw = false;  afterDraw = false;  beforeDrawAxis = false;  beforeDrawSeries = false;  Flag = true; } private void DrawShape(Steema.TeeChart.Drawing.Graphics3D gg) {  gg.Brush.Color = Color.Yellow;  gg.Pen.Visible = true;  gg.Pen.Style = System.Drawing.Drawing2D.DashStyle.Dash;  gg.Brush.Visible = true;  gg.Ellipse(1,1,gg.Chart.Width - 1,gg.Chart.Height - 1); } private void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g) {  if(afterDraw) {  DrawShape(g);  } } private void tChart1_BeforeDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g) {  if(beforeDraw) {  DrawShape(g);  } } private void tChart1_BeforeDrawAxes(object sender, Steema.TeeChart.Drawing.Graphics3D g) {  if(beforeDrawAxis) {  DrawShape(g);  } } private void tChart1_BeforeDrawSeries(object sender, Steema.TeeChart.Drawing.Graphics3D g) {  if(beforeDrawSeries) {  DrawShape(g);  } } private void radioButton4_Click(object sender, System.EventArgs e) {  SetFlags(ref afterDraw);  tChart1.Refresh(); } private void radioButton3_Click(object sender, System.EventArgs e) {  SetFlags(ref beforeDrawSeries);  tChart1.Refresh(); } private void radioButton2_Click(object sender, System.EventArgs e) {  SetFlags(ref beforeDrawAxis);  tChart1.Refresh(); } private void radioButton1_Click(object sender, System.EventArgs e) {  SetFlags(ref beforeDraw);  tChart1.Refresh(); } 

[VB.Net]

Private BeforeDraw As Boolean Private BeforeDrawAxis As Boolean Private BeforeDrawSeries As Boolean Private AfterDraw As Boolean  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  SetFlags(BeforeDraw)  Dim Bar1 As New Steema.TeeChart.Styles.Bar(TChart1.Chart)  Bar1.FillSampleValues(20)  RadioButton1.Checked = True End Sub Private Sub SetFlags(ByRef Flag As Boolean)  BeforeDraw = False  BeforeDrawAxis = False  BeforeDrawSeries = False  AfterDraw = False  Flag = True End Sub Private Sub DrawShape(ByVal gg As Steema.TeeChart.Drawing.Graphics3D)  gg.Brush.Color = Color.Yellow  gg.Pen.Visible = True  gg.Pen.Style = Drawing.Drawing2D.DashStyle.Dash  gg.Brush.Visible = True  gg.Ellipse(1, 1, gg.Chart.Width - 1, gg.Chart.Height - 1) End Sub Private Sub TChart1_AfterDraw(ByVal sender As Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D) Handles TChart1.AfterDraw  If AfterDraw = True Then  DrawShape(g)  End If End Sub Private Sub TChart1_BeforeDraw(ByVal sender As Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D) Handles TChart1.BeforeDraw  If BeforeDraw = True Then  DrawShape(g)  End If End Sub Private Sub TChart1_BeforeDrawAxes(ByVal sender As Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D) Handles TChart1.BeforeDrawAxes  If BeforeDrawAxis = True Then  DrawShape(g)  End If End Sub Private Sub TChart1_BeforeDrawSeries(ByVal sender As Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D) Handles TChart1.BeforeDrawSeries  If BeforeDrawSeries = True Then  DrawShape(g)  End If End Sub Private Sub RadioButton4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton4.Click  SetFlags(AfterDraw)  TChart1.Refresh() End Sub Private Sub RadioButton3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton3.Click  SetFlags(BeforeDrawSeries)  TChart1.Refresh() End Sub Private Sub RadioButton2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton2.Click  SetFlags(BeforeDrawAxis)  TChart1.Refresh() End Sub Private Sub RadioButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton1.Click  SetFlags(BeforeDraw)  TChart1.Refresh() End Sub 

确保将自定义绘制的项目保存到Canvas

如果不在其中一个Chart事件中调用Canvas绘制代码,则自定义绘图将不会永久保存到Canvas,从而导致在应用程序最小化时丢失任何添加内容或另一个窗口放在它上面。您的代码不需要直接驻留在Chart事件中; 如果将代码放在BeforeDrawSeries / AfterDraw中并且检查运行时设置的标记,则可以在图表窗口的生命周期中保存用户绘制的项目。当活动标记为true时,绘制方法因此运行绘制代码,如上例所示。

绘制线

让我们添加一个画布线: 示例(从左上角到右下角对角画一条线)

[C#]

private void Form1_Load(object sender,System.EventArgs e){  line1.FillSampleValues(20);  line1.VertAxis = VerticalAxis.Both;  line1.HorizAxis = Horizo​​ntalAxis.Both;  tChart1.Aspect.View3D = false; }  private void tChart1_AfterDraw(object sender,Steema.TeeChart.Drawing.Graphics3D g){  Point s = new Point(tChart1.Axes.Left.Position,tChart1.Axes.Top.Position);  点e =新点(tChart1.Axes.Right.Position,tChart1.Axes.Bottom.Position);  g.MoveTo(一个或多个);  g.LineTo(E,0); } 

[VB.Net]

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  Line1.FillSampleValues(20)  Line1.VertAxis = Steema.TeeChart.VerticalAxis.Both  Line1.HorizAxis = Steema.TeeChart.HorizontalAxis.Both  TChart1.Aspect.View3D = False End Sub  Private Sub TChart1_AfterDraw(ByVal sender As Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D) Handles TChart1.AfterDraw  Dim S As New Point(TChart1.Axes.Left.Position, TChart1.Axes.Top.Position)  Dim E As New Point(TChart1.Axes.Right.Position, TChart1.Axes.Bottom.Position)  g.MoveTo(S)  g.LineTo(E, 0) End Sub

在3D图表上,由于3D正交位移,轴位置偏离图表区域。我们可以相应地移动线: 示例(在3D图表的图表区域中从左上角到右下角对角绘制一条线)

[C#]

private void Form1_Load(object sender, System.EventArgs e) {  line1.FillSampleValues(20);  line1.VertAxis = VerticalAxis.Both;  line1.HorizAxis = HorizontalAxis.Both;  tChart1.Aspect.Chart3DPercent = 50; }  private void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g) {  Steema.TeeChart.Drawing.Point3D s = new Steema.TeeChart.Drawing.Point3D();  s.X = tChart1.Axes.Left.Position;  s.Y = tChart1.Axes.Top.Position;  s.Z = 0;   Steema.TeeChart.Drawing.Point3D e = new Steema.TeeChart.Drawing.Point3D();  e.X = tChart1.Axes.Right.Position;  e.Y = tChart1.Axes.Bottom.Position;  e.Z = tChart1.Aspect.Width3D;   g.MoveTo(s);  g.LineTo(e); } 

[VB.Net]

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  Line1.FillSampleValues(20)  Line1.VertAxis = Steema.TeeChart.VerticalAxis.Both  Line1.HorizAxis = Steema.TeeChart.HorizontalAxis.Both  TChart1.Aspect.Chart3DPercent = 50 End Sub  Private Sub TChart1_AfterDraw(ByVal sender As Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D) Handles TChart1.AfterDraw  Dim S As New Steema.TeeChart.Drawing.Point3D()  S.X = TChart1.Axes.Left.Position  S.Y = TChart1.Axes.Top.Position  S.Z = 0   Dim E As New Steema.TeeChart.Drawing.Point3D()  E.X = TChart1.Axes.Right.Position  E.Y = TChart1.Axes.Bottom.Position  E.Z = TChart1.Aspect.Width3D   g.MoveTo(S)  g.LineTo(E) End Sub 

画布笔和画笔

上面的线是使用为绘制线之前绘制的最后一个对象定义的笔和画笔绘制的。那可能是也可能不是你想要的笔。相应地更改笔: 示例(在绘制线之前定义笔)

[C#]

private void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g) {  Point p5 = new Point(line1.CalcXPos(5), line1.CalcYPos(5));  Point p15 = new Point(line1.CalcXPos(15), line1.CalcYPos(15));  g.Pen.DashCap = System.Drawing.Drawing2D.DashCap.Triangle;  g.Pen.EndCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor;  g.Pen.Style = System.Drawing.Drawing2D.DashStyle.DashDotDot;  g.Pen.Transparency = 70;  g.Pen.Width = 3;  g.Pen.Color = Color.BlueViolet;  g.MoveTo(p5);  g.LineTo(p15, 0); } 

[VB.Net]

Private Sub TChart1_AfterDraw(ByVal sender As Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D) Handles TChart1.AfterDraw  Dim P5 As New Point(Line1.CalcXPos(5), Line1.CalcYPos(5))  Dim P15 As New Point(Line1.CalcXPos(15), Line1.CalcYPos(15))  g.Pen.DashCap = System.Drawing.Drawing2D.DashCap.Triangle  g.Pen.EndCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor  g.Pen.Style = System.Drawing.Drawing2D.DashStyle.DashDotDot  g.Pen.Transparency = 70  g.Pen.Width = 3  g.Pen.Color = Color.BlueViolet  g.MoveTo(P5)  g.LineTo(P15, 0) End Sub 

点击“了解更多”下载TeeChart Pro ActiveX最新版本

↓↓↓

标签: #用vbnet编写画图程序