2013-04-25 75 views
0

这个职位相当于你的答案在我以前的帖子...的TeeChart RedCross错误持续

之前我上传一个简单的项目适合你,让我尝试别的东西:我注意到,当我换用了点系列ColorGrid系列发生了同样的事情,但是,当我(与ColorGrid系列)使用“MyColorGrid.YValues [gridPosition] = val”而不是MyColorGrid.Add(X,Y,Z),那么它的工作原理。有没有办法以相同的方式使用点系列,即第一次分配所有点,然后使用XValues [idx] = x和YValues [idx] = y来更新点?当我使用Add方法和Clear方法时,问题似乎就会发生。当我用XValues和YValues等更新这些值时,问题似乎就解决了!关键是,我不能让它在积分一系列工作......很容易与ColorGrid系列:

  for (int r = 0; r < 128; r++) 
      { 
       for (int d = 0; d < 128; d++) 
       {    
        MyColorGrid.YValues[d * 128 + r] = some_value; 
       } 
      } 

      MyColorGrid.BeginUpdate(); 
      MyColorGrid.EndUpdate(); 

问题1:如何实现相同的点系列? 问题2:如果我成功了,我该如何清除/删除点,而不必在之后再次“添加(x,y)”? 问题3:这是使用BeginUpdate/EndUpdate的最佳方式吗?有什么不同?一般来说,所有可用更新方法之间有什么区别,以及如何选择正确的更新方法? 举几个例子:

MyColorGrid.RefreshSeries 
MyColorGrid.Repaint 
MyTChart.Refresh 
MyTChart.AutoRepaint 

问候

JD

回答

2

问题1:如何实现相同的点系列?

我建议您在更新点时使用与下一个类似的代码,以正确的方式工作。

Steema.TeeChart.Styles.Points points1; 
Steema.TeeChart.TChart tChart1; 
Random rnd; 
public Form1() 
{ 
    InitializeComponent(); 

    tChart1 = new Steema.TeeChart.TChart(); 
    this.Controls.Add(tChart1); 
    tChart1.Aspect.View3D = false; 
    tChart1.Height = 400; 
    tChart1.Width = 500; 
    tChart1.Dock = DockStyle.Bottom; 
    points1 = new Steema.TeeChart.Styles.Points(tChart1.Chart); 
    rnd = new Random(); 
    InitializeChart(); 
} 

private void InitializeChart() 
{ 

    for (int i = 0; i < 128; i++) 
    { 
     points1.Add(i, rnd.Next(100)); 

    } 
    tChart1.Refresh(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 128; i++) 
    { 
     points1.XValues[i] = i+1; 
     points1.YValues[i] = rnd.Next(100); 

    } 
    points1.BeginUpdate(); 
    points1.EndUpdate(); 

} 

问题2:如果我成功了,我怎么清楚/删除点,不必重新 “加入(X,Y)” 之后他们?

我建议你使用SetNull()方法使null成为你不想要的点。你可以做同样的代码为下一行:

points1.SetNull(3); 

问题3:这是使用的BeginUpdate/EndUpdate的最佳方式?有什么不同?一般来说,所有可用更新方法之间有什么区别,以及如何选择正确的更新方法?举几个例子:

关于的BeginUpdate/EndUpdate:

该方法的BeginUpdate重新计算功能只是一个时间,当完成添加点和EndUpdate方法是必要的.BeginUpdate用于重新计算功能只是一次当完成加分时。 因此,当您决定使用BeginUpdate更新您的系列时,您必须使用这两种方法。

关于其他的方法:

系列:

方法之间的差异是由它的定义是帮助文档中找到,您可以在下一行看到解释。RefreshSeries: RefreshSeries方法通知所有相关系列重新计算它们的点数。每个系列都有一个DataSource属性。当DataSource是有效的Series或DataSet组件时,Series从DataSource获取所有点值并将它们添加为Series点。 RefreshSeries方法强制系列清除并再次从DataSource组件获取所有点。刷新过程递归地遍历系列树

系列。残缺:此系列方法强制整个父图表进行重绘。您通常不直接致电Repaint。在内部更改其属性时,可以在派生的TChartSeries组件中使用它。

TChart.Refresh:强制控件使其客户区失效并立即重绘本身和任何子控件。

TChart.AutoRepaint:使用AutoRepaint false可禁用Chart repainting(例如)将大量点添加到Chart Series。这可避免在添加点时重新绘制图表。可以重新启用AutoRepaint,然后在添加所有点时执行手动重新绘制命令。

我希望能帮上忙。如果您有任何问题,请告诉我。

谢谢,