Teechart's DrawValue

本文关键字:DrawValue Teechart | 更新日期: 2023-09-27 18:01:22

如果我在图表上绘制了一个蜡烛系列,并且我更改了最后一个蜡烛的CloseValue,那么蜡烛不会在图表上自动更新。我不想让整个图表失效因为如果有很多蜡烛,那就太慢了。我原以为《Candle》系列的DrawValue方法可以解决这个问题,但看起来它实际上也重新绘制了整个图表。是否有一种方法可以在屏幕上更新/重新绘制一个蜡烛?

我知道当我在Delphi 5中这样做时,蜡烛似乎在没有重新绘制整个图表的情况下更新-尽管整个图表更新的速度足够快,看起来就是这样。一般来说,c#的图图绘制比Delphi 5 VCL的图图绘制慢3到5倍…

Teechart's DrawValue

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

  candle1.RefreshSeries();

你能告诉我,它是否适合你吗?如果您有任何问题,请告诉我。

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

好吧,我想我没有很好地解释我自己,桑德拉。让我试试再一次。假设我有一个图表,只有一个级数——30000蜡烛。假设我在图表上显示了所有的蜡烛。重新绘制所有30K蜡烛需要时间。假设代码只改变了一个蜡烛-蜡烛最后一个。有没有办法把那一小部分重新粉刷一下有新蜡烛的图表,而不是重新绘制整个图表为了展示新的变化?我尝试了无效函数传递它蜡烛的矩形,但似乎Invalidate()和Invalidate(rect)产生完全相同的结果。

你能告诉我们你用的是哪个版本的TeeChart吗?另一方面,我已经做了一个简单的代码,我已经修改了CloseValue,我已经释放了没有必要重新绘制,重新绘制或刷新系列,因为值是自动更新的。我已经用最新版本的TeeChartFor做了测试。网络版本号[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;
}

谢谢,