我有一个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中?
提前致谢: - )
答案 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许可证。
我希望能有所帮助。
谢谢,