2013-04-25 76 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,然後在添加所有點時執行手動重新繪製命令。

我希望能幫上忙。如果您有任何問題,請告訴我。

謝謝,