0

这篇文章对应于你在我上一篇文章中的回答......

在我为您上传一个简单的项目之前,让我尝试一下其他方法:我注意到,当我将 Points Series 与 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

问候

京东

4

1 回答 1

2

问题 1:我如何在积分系列中达到同样的效果?

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

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 一起使用,以便在完成添加点时重新计算一次函数。因此,当您决定使用 BeginUpdate 更新您的系列时,您必须同时使用这两种方法。

关于其他方法:

方法之间的差异由帮助文档中的定义解释,您可以在下一行中看到:

Series.RefreshSeries: RefreshSeries 方法通知所有依赖的 Series 重新计算它们的点。每个系列都有一个 DataSource 属性。当 DataSource 是有效的 Series 或 DataSet 组件时,Series 从 DataSource 中获取所有点值并将它们添加为 Series 点。RefreshSeries 方法强制 Series 清除并再次从 DataSource 组件中获取所有点。Refreshing 过程递归遍历Series树

Series.Repaint:此 Series 方法强制整个父图表重新绘制。您通常不会直接调用 Repaint。当在内部更改它们的属性时,它可以在派生的 TChartSeries 组件中使用。

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

TChart.AutoRepaint:使用 AutoRepaint false 禁用图表重绘,同时(例如)向图表系列添加大量点。这避免了在添加点时重新绘制图表。可以重新启用自动重绘,然后在添加所有点后执行手动重绘命令。

我希望会有所帮助。如果您有任何问题,请告诉我。

谢谢,

于 2013-04-29T13:39:54.827 回答