TChart控制冻结

时间:2013-05-31 09:31:43

标签: c# .net teechart

我有一个TChart组件,带有Fastline系列和ColorBand工具。在表格上我也有一个启动计时器的按钮。在每个计时器过去事件中,我生成2048个随机数据样本并更新Fasline系列。当我启动计时器时,TChart上没有动画!它似乎随机工作,但是,当我隐藏并显示表单(通过最小化/最大化,或通过tChart1.Hide()/ tChart1.Show())然后动画再次开始工作,或者当我在启动计时器之前拖动其中一条ColorBand线,然后动画工作。但是当我首先启动计时器时动画不起作用。而且,另外,当它不起作用时,TChart似乎被冻结,即,不响应任何鼠标命令,如平移或缩放。这是一些代码:

在我的form.designer.cs中:

partial class Form1
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.button1 = new System.Windows.Forms.Button();
        this.tChart1 = new Steema.TeeChart.TChart();
        this.checkBox1 = new System.Windows.Forms.CheckBox();
        this.SuspendLayout();
        // 
        // button1
        // 
        this.button1.BackColor = System.Drawing.SystemColors.Control;
        this.button1.Location = new System.Drawing.Point(12, 12);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(60, 23);
        this.button1.TabIndex = 1;
        this.button1.Text = "Start";
        this.button1.UseVisualStyleBackColor = false;
        this.button1.Click += new System.EventHandler(this.button1_Click);
        // 
        // tChart1
        // 
        // 
        // 
        // 
        // 
        // 
        // 
        this.tChart1.Axes.Depth.LabelsAsSeriesTitles = true;
        // 
        // 
        // 
        this.tChart1.Axes.DepthTop.LabelsAsSeriesTitles = true;
        this.tChart1.Location = new System.Drawing.Point(12, 41);
        this.tChart1.Name = "tChart1";
        this.tChart1.Size = new System.Drawing.Size(789, 318);
        this.tChart1.TabIndex = 2;
        // 
        // checkBox1
        // 
        this.checkBox1.AutoSize = true;
        this.checkBox1.Location = new System.Drawing.Point(78, 16);
        this.checkBox1.Name = "checkBox1";
        this.checkBox1.Size = new System.Drawing.Size(49, 17);
        this.checkBox1.TabIndex = 3;
        this.checkBox1.Text = "Drag";
        this.checkBox1.UseVisualStyleBackColor = true;
        this.checkBox1.Click += new System.EventHandler(this.checkBox1_Click);
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(823, 371);
        this.Controls.Add(this.checkBox1);
        this.Controls.Add(this.tChart1);
        this.Controls.Add(this.button1);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
        this.Name = "Form1";
        this.Text = "Form1";
        this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
        this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.Button button1;
    private Steema.TeeChart.TChart tChart1;
    private System.Windows.Forms.CheckBox checkBox1;
}

然后在我的form.cs:

public partial class Form1 : Form
{
    System.Timers.Timer timer;
    private Steema.TeeChart.Tools.ColorBand tool;
    Steema.TeeChart.Styles.FastLine primaryLine;
    double w = 0;
    bool enabled = false;

    public Form1()
    {
        InitializeComponent();
        initPrimaryGraph();
        initTool();

        timer = new System.Timers.Timer();
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        timer.Interval = 50;
        timer.Stop();
    }

    private void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        Random rnd = new Random();
        for (int i = 0; i < 2048; i++)
        {
            primaryLine.XValues[i] = i;
            primaryLine.YValues[i] = 20 + rnd.Next(50);
        }
        primaryLine.BeginUpdate();
        primaryLine.EndUpdate();
    }

    private void initTool()
    {
        tool = new Steema.TeeChart.Tools.ColorBand();
        tChart1.Tools.Add(tool);
        tool.Axis = tChart1.Axes.Bottom;
        tool.Start = 300;
        tool.End = 400;
        tool.Brush.Color = Color.Yellow;
        tool.Pen.Color = Color.Blue;
        tool.Pen.Width = 2;
        tool.Transparency = 60;

        tool.StartLine.AllowDrag = true;
        tool.StartLine.DragRepaint = true;
        tool.ResizeStart = true;
        tool.StartLine.DragLine += new EventHandler(StartLine_DragLine);

        tool.EndLine.AllowDrag = true;
        tool.EndLine.DragRepaint = true;
        tool.ResizeEnd = true;
        tool.EndLine.DragLine += new EventHandler(EndLine_DragLine);
    }

    void StartLine_DragLine(object sender, EventArgs e)
    {
        if (enabled)
        {
            tool.End = tool.Start + w;
        }
    }

    void EndLine_DragLine(object sender, EventArgs e)
    {
        if (enabled)
        {
            tool.Start = tool.End - w;
        }
    }

    private void initPrimaryGraph()
    {
        tChart1.Header.Visible = true;

        tChart1.Axes.Bottom.Automatic = false;
        tChart1.Axes.Bottom.Minimum = 0;
        tChart1.Axes.Bottom.Maximum = 2048;
        tChart1.Axes.Bottom.Labels.Font.Color = Color.White;
        tChart1.Axes.Bottom.Grid.Visible = false;

        tChart1.Axes.Left.Automatic = false;
        tChart1.Axes.Left.Minimum = 0;
        tChart1.Axes.Left.Maximum = 300;
        tChart1.Axes.Left.Labels.Font.Color = Color.White;

        tChart1.Aspect.View3D = false;

        tChart1.Walls.Back.Visible = false;
        tChart1.Walls.Bottom.Visible = false;
        tChart1.Walls.Left.Visible = false;
        tChart1.Walls.Right.Visible = false;

        tChart1.Legend.Visible = false;
        tChart1.BackColor = Color.Black;
        tChart1.Panel.Visible = false;

        //PRIMARY GRAPH.....
        primaryLine = new Steema.TeeChart.Styles.FastLine();
        tChart1.Series.Add(primaryLine);
        Random rnd = new Random();
        for (int i = 0; i < 2048; i++)
        {
            double x = i;
            double y = 20 + rnd.Next(50);
            primaryLine.Add(x, y);
        }
        primaryLine.LinePen.Style = System.Drawing.Drawing2D.DashStyle.Solid;
        primaryLine.LinePen.Color = Color.White;
        primaryLine.LinePen.Width = 1;
        primaryLine.VertAxis = Steema.TeeChart.Styles.VerticalAxis.Left;
    }

    private void tool_DragLine(object sender, EventArgs e)
    {
        Steema.TeeChart.Tools.ColorLine t = sender as Steema.TeeChart.Tools.ColorLine;
        this.Text = t.Value.ToString();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (timer.Enabled)
        {
            timer.Stop();
            button1.Text = "Start";
        }
        else
        {
            timer.Start();
            button1.Text = "Stop";
        }
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        timer.Stop();
    }

    private void checkBox1_Click(object sender, EventArgs e)
    {
        if (checkBox1.Checked)
        {
            w = tool.End - tool.Start;
        }
        enabled = checkBox1.Checked;
    }
}

我有另一个问题。我想通过编写自定义API(自定义用户控件)来创建TeeChart组件的黑盒实现,以暴露特定功能,以便我可以在其他项目中使用它,以便我的一个或多个同事在工作中在他们的项目中使用它。我应该购买什么版本的TeeChart版本/许可证才能将TeeChart功能包装在可以在各种项目/计算机上使用的自定义组件/ dll中?

提前致谢: - )

1 个答案:

答案 0 :(得分:0)

  

我有一个TChart组件,带有Fastline系列和ColorBand   工具。在表格上我也有一个启动计时器的按钮。在每一个   计时器过去事件我生成2048个随机数据样本并更新   Fasline系列。当我启动计时器时,没有动画   TChart!它似乎随机工作,但是......当我隐藏和   显示表格(通过最小化/最大化,或通过   tChart1.Hide()/ tChart1.Show())然后动画开始工作   再次,或者当我在开始之前拖动其中一条ColorBand线时   计时器,然后动画工作。但动画不起作用   我先启动计时器。而且,另外,当它不起作用时,   TChart似乎被冻结了,即对任何鼠标都没有反应   平移或缩放等命令。这是一些代码:

我修改了一些你的代码,现在它在我的最后工作。见下:

 Timer timer;
    private Steema.TeeChart.Tools.ColorBand tool;
    Steema.TeeChart.Styles.FastLine primaryLine;
    double w = 0;
    bool enabled = false;

    public Form1()
    {
        InitializeComponent();
        initPrimaryGraph();
        initTool();

        timer = new Timer();
        //Enable Timer
        timer.Enabled = true;
        timer.Interval = 50;
        timer.Tick += timer_Tick;
    }

    void timer_Tick(object sender, EventArgs e)
    {

        AnimateSeries(tChart1);
    }

    private void AnimateSeries(TChart tChart)
    {
        Random rnd = new Random();
        tChart.AutoRepaint = false;
        primaryLine.BeginUpdate();
        foreach (Steema.TeeChart.Styles.Series s in tChart.Series)
        {         
            for (int i = 0; i < 2048; i++)
            {
                primaryLine.XValues[i] = i;
                primaryLine.YValues[i] = 20 + rnd.Next(50);
            }

        }

        tChart.AutoRepaint = true;
        primaryLine.EndUpdate();
    }
    private void initTool()
    {
        tool = new Steema.TeeChart.Tools.ColorBand();
        tChart1.Tools.Add(tool);
        tool.Axis = tChart1.Axes.Bottom;
        tool.Start = 300;
        tool.End = 400;
        tool.Brush.Color = Color.Yellow;
        tool.Pen.Color = Color.Blue;
        tool.Pen.Width = 2;
        tool.Transparency = 60;

        tool.StartLine.AllowDrag = true;
        tool.StartLine.DragRepaint = true;
        tool.ResizeStart = true;
        tool.StartLine.DragLine += new EventHandler(StartLine_DragLine);

        tool.EndLine.AllowDrag = true;
        tool.EndLine.DragRepaint = true;
        tool.ResizeEnd = true;
        tool.EndLine.DragLine += new EventHandler(EndLine_DragLine);
    }

    void StartLine_DragLine(object sender, EventArgs e)
    {
        if (enabled)
        {
            tool.End = tool.Start + w;
        }
    }

    void EndLine_DragLine(object sender, EventArgs e)
    {
        if (enabled)
        {
            tool.Start = tool.End - w;
        }
    }

    private void initPrimaryGraph()
    {
        tChart1.Header.Visible = true;
        tChart1.Aspect.View3D = false;

        tChart1.Walls.Back.Visible = false;
        tChart1.Walls.Bottom.Visible = false;
        tChart1.Walls.Left.Visible = false;
        tChart1.Walls.Right.Visible = false;

        tChart1.Legend.Visible = false;
        tChart1.BackColor = Color.Black;
        tChart1.Panel.Visible = false;

        //PRIMARY GRAPH.....
        primaryLine = new Steema.TeeChart.Styles.FastLine();
        tChart1.Series.Add(primaryLine);
        Random rnd = new Random();
        for (int i = 0; i < 2048; i++)
        {
            double x = i;
            double y = 20 + rnd.Next(50);
            primaryLine.Add(x, y);
        }
        primaryLine.LinePen.Style = System.Drawing.Drawing2D.DashStyle.Solid;
        primaryLine.LinePen.Color = Color.White;
        primaryLine.LinePen.Width = 1;
        //AXES
        tChart1.Axes.Bottom.Automatic = false;
        tChart1.Axes.Bottom.Minimum = primaryLine.XValues.Minimum;
        tChart1.Axes.Bottom.Maximum = primaryLine.XValues.Maximum;
        tChart1.Axes.Bottom.Increment = 200; 
        tChart1.Axes.Bottom.Labels.Font.Color = Color.White;
        tChart1.Axes.Bottom.Grid.Visible = false;
        tChart1.Axes.Left.Automatic = false;
        tChart1.Axes.Left.Minimum = 0;
        tChart1.Axes.Left.Maximum = 300;

        tChart1.Axes.Left.Labels.Font.Color = Color.White;
        primaryLine.VertAxis = Steema.TeeChart.Styles.VerticalAxis.Left;
        tChart1.Draw();
    }

    private void tool_DragLine(object sender, EventArgs e)
    {
        Steema.TeeChart.Tools.ColorLine t = sender as Steema.TeeChart.Tools.ColorLine;
        this.Text = t.Value.ToString();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (timer.Enabled)
        {
            timer.Stop();
            button1.Text = "Start";
        }
        else
        {
            timer.Start();
            button1.Text = "Stop";
        }
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        timer.Stop();
    }

正如您在代码中看到的,我已经更改了其他的Timer类型,我认为更合适。您能否告诉我们以前的代码是否按预期工作?

  

我有另一个问题。我想创建一个黑盒实现   通过编写自定义API(自定义用户)来创建TeeChart组件   控制)公开特定功能,以便我可以使用它   其他项目,以便我的一个或多个同事在工作   在他们的项目中使用它。我应该使用什么版本的TeeChart   购买,这将允许我包装TeeChart功能   可以在各种情况下使用的自定义组件/ dll   项目/计算机?

TeeChart可以被另一个发布teeChart特定特征的设计时组件(dll)重用。请注意,在设计时重用tee组件的计算机也应该安装TeeChart Developer许可证。

我希望能有所帮助。

谢谢,