NewSeries := TLineSeries.Create(Self);
.....
Chart1.AddSeries(NewSeries);
我有个按钮,有个COMBOBOX,根据COMBOBOX的不同直,在CHART1里显示不同的图形,
比如COMBOBOX里有4项的话,那我的CHART1里就能显示4条曲线,可是点一次就加一条,
会出现很多重复的曲线,怎么能控制一种情况只显示一条曲线?

解决方案 »

  1.   

    不要每次都创建一个Series,共用一个Series,在每次点击的时候把原来的内容Clear掉,然后再显示内容:
      ...
      Chart1.Series[0].Clear;
      Chart1.Series[0].Add(sValue1, sLable1);
      Chart1.Series[0].Add(sValue2, sLable2);
      ...
      

  2.   

    不知道你的要求是不是假如4种情况都点了那就会有4条曲线,而只是每种情况的曲线只能有一条,如果是这样的需求的话,那在设计的时候就创建4个Series,在点击时根据点击的内容把相应的Series先Clear然后再画曲线。
      

  3.   

    你在初始化Combobox的时候给每个item上挂个object
    具体用ComboBox1.Items.AddObject(),用来指示是否
    已经加过该种图形了//初始化
    ComboBox1.Items.AddObject('text',object)
    //取object
    ComboBox1.Items.Objects[i]
      

  4.   

    to:hthunter(核桃) “不知道你的要求是不是假如4种情况都点了那就会有4条曲线,而只是每种情况的曲线只能有一条,”是这样的,做4个series我觉得不好,因为我是动态创建的。
    to :我觉得你说的这种方法可行,能写个简单的小例子吗?没用过addobject
      

  5.   

    静态创建4条曲线;然后根据combobox的值让不同的曲线显示
      

  6.   

    对于某一种类型,你点过一次之后再点它就不需要重画了吗?
    如果是这样的话,那小毛驴的AddObject可以是一种解决方法,还有一种更简单的方法:
    用一个字符串sClickedItems保存点击过的ComboBox项对应的ItemIndex,两个数字之间随便用一个什么符号分隔开(如“1, 2, 3”),判断该项是不是已经点过只需要判断Pos(IntToStr(ComboBox1.ItemIndex), sClickedItems)的值就可以了,如果点击过了就不作任何处理,如果没点击过则sClickedItems := sClickedItems + ',' + IntToStr(ComboBox1.ItemIndex)
      

  7.   

    to: hthunter(核桃) ,谢谢,你说的是最基本的解决办法。我还想知道如果用AddObject怎么写?
      

  8.   

    初始化ComboBox的内容:
      with ComboBox1.Items do
      begin
        Clear;
        AddObject('曲线1', nil);
        AddObject('曲线2', nil);
        AddObject('曲线3', nil);
        AddObject('曲线4', nil);
      end;
    当点击一个ComboBox1的Items[i]时,
    判断ComboBox1.Objects[i] 是否为 nil,为nil时创建新的Series,并将该Series赋值给ComboBox1.Objects[i],如果不为nil则不做任何操作。
      

  9.   

    当然还有一个问题是你创建的这些Series需要在窗口释放前用程序显式释放的(否则就违背了动态创建的初衷了),不过我想你应该已经处理了这些问题吧