0

如果我在 teechart 上绘制了一个蜡烛系列,并且我更改了最后一根蜡烛的 CloseValue,则蜡烛不会在图表上自动更新。我真的不想使整个图表无效以显示它,因为如果有很多蜡烛,那会很慢。我以为 Candle 系列的 DrawValue 方法可以解决这个问题,但似乎它实际上也重绘了整个图表。有没有办法在屏幕上更新/重绘那根蜡烛?

我知道当我在 Delphi 5 中执行此操作时,蜡烛似乎在没有重新绘制整个图表的情况下更新 - 尽管可能整个图表更新速度足够快,以至于看起来就是这样。一般来说,C# 的 Teechart 绘制似乎比 Delphi 5 VCL Teechart 的绘制慢 3 到 5 倍......

4

1 回答 1

1

我认为您可以使用只允许刷新系列 RefreshSeries 的方法,就像下一行代码一样:

  candle1.RefreshSeries();

你能告诉我,如果它对你有用吗?如果您有任何问题,请告诉我。

更新信息以回答下一个问题:

好吧,我想我在这里解释得不好,桑德拉。让我再尝试一次。假设我的图表只有一个系列 - 30,000 支蜡烛。假设我在图表上显示所有蜡烛。重新绘制所有 30K 蜡烛需要时间。假设代码只更改了一根蜡烛 - 最后一根。有没有办法只重绘图表中包含新蜡烛的那一小部分,而不是重绘整个图表以显示新的变化?我尝试将 Invalidate 函数传递给蜡烛的矩形,但似乎 Invalidate() 和 Invalidate(rect) 产生完全相同的结果。

您能告诉我们您使用的是哪个版本的 TeeChart?另一方面,我编写了一个简单的代码,在其中修改了 CloseValue 并发布了不需要重绘、重绘或刷新 Series,因为该值会自动更新。我使用最新版本的 TeeChartFor.Net 内部版本号 [4.1.2012.01312] 和下一个代码进行了测试:

Steema.TeeChart.Styles.Candle candleSeries1;
Random r;
double tmpOpen;
double tmpClose;
int count;
DateTime dt;
TimeSpan ts;
private void InitializeChart()
{
    tChart1.Aspect.View3D=false;
    tChart1.AutoRepaint = false;
     r = new Random();
    candleSeries1.Clear();
    candleSeries1.XValues.DateTime = true;
    candleSeries1.GetHorizAxis.Labels.Angle = 90;
    count = 0;
    dt = DateTime.Today;
    ts = TimeSpan.FromDays(1);
    candleSeries1.Pen.Visible = false;
    for (int t=0;t<30000;t++)
    {
        tmpOpen = r.Next(100);
        tmpClose = tmpOpen - r.Next(100);
            ++count;
            candleSeries1.Add(dt,tmpOpen,tmpOpen + r.Next(50),
                tmpClose -r.Next(50),tmpClose);
        dt += ts;
    }
    tChart1.AutoRepaint = true;
}
private void button1_Click(object sender, EventArgs e)
{
    tmpOpen = r.Next(100);
    tmpClose = tmpOpen - r.Next(100);
    candleSeries1[candleSeries1.LastVisibleIndex].Close = tmpOpen;

}

谢谢,

于 2013-02-27T15:39:44.687 回答