翻譯|使用教程|編輯:凌霄漢|2022-04-07 17:04:15.447|閱讀 234 次
概述:此次文章為大家TeeChart Pro .NET使用教程中的圖表面板上的自定義繪圖。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
TeeChart Pro 將自動為您定義所有 Axis 標簽,并提供足夠的靈活性來定制您可能有的任何特定要求。 TeeChart Pro 提供真正的多軸。 這些在設計或運行時可用,并為 Axis 定義提供了無數(shù)的可能性和靈活性。
使用 TeeChart 的 Canvas 方法時,請記住繪圖順序很重要。 在圖表上繪制一條線,然后添加系列數(shù)據(jù)點將導致該線被透支。
有四個主要的圖表繪制事件,按順序排列:
[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 
如果您沒有在圖表事件之一中調(diào)用 Canvas 繪制代碼,自定義繪圖將不會永久保存到 Canvas 中,因此當應用程序最小化或?qū)⒘硪粋€窗口置于其上時,任何添加內(nèi)容都會丟失。 您的代碼不需要直接駐留在圖表事件中; 如果您將代碼放在 BeforeDrawSeries/AfterDraw 中并檢查運行時 Draw 方法設置的標志,從而在活動標記為 true 時運行您的繪制代碼,則用戶繪制的項目可以在圖表窗口的整個生命周期內(nèi)保存,如上例所示。
讓我們添加一個畫布線:
[C#] 
private void Form1_Load(object sender, System.EventArgs e) { 
        line1.FillSampleValues(20); 
        line1.VertAxis = VerticalAxis.Both; 
        line1.HorizAxis = HorizontalAxis.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); 
        Point e = new Point(tChart1.Axes.Right.Position, tChart1.Axes.Bottom.Position); 
        g.MoveTo(s); 
        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 正交位移,軸位置從圖表區(qū)域偏移。 我們可以相應地移動線:
[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 
如果您想了解TeeChart for .NET正版價格,歡迎咨詢
 
 
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn