0

この投稿は、私の以前の投稿に対するあなたの回答に対応しています...

簡単なプロジェクトをアップロードする前に、別のことを試してみましょう。ポイント シリーズを ColorGrid シリーズと交換すると、同じことが起こることに気付きましたが、(ColorGrid シリーズで) "MyColorGrid.YValues[ MyColorGrid.Add(X, Y, Z) の代わりに gridPosition] = val" を使用すると機能します。ポイント シリーズを同じ方法で使用する方法はありますか。つまり、最初にすべてのポイントを割り当ててから、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: 成功した場合、ポイントを後で "Add(x, y)" せずにクリア/削除するにはどうすればよいですか? 質問 3: これが BeginUpdate/EndUpdate の最適な使用方法ですか? 違いは何ですか?一般に、利用可能なすべての更新方法の違いは何ですか? また、正しい方法を選択するにはどうすればよいですか? いくつかの例:

MyColorGrid.RefreshSeries
MyColorGrid.Repaint
MyTChart.Refresh
MyTChart.AutoRepaint

よろしく

JD

4

1 に答える 1

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: 成功した場合、ポイントを後で "Add(x, y)" せずにクリア/削除するにはどうすればよいですか?

メソッド SetNull() を使用して null を不要にすることをお勧めします。次のコード行と同じことができます。

points1.SetNull(3); 

質問 3: これが BeginUpdate/EndUpdate の最適な使用方法ですか? 違いは何ですか?一般に、利用可能なすべての更新方法の違いは何ですか? また、正しい方法を選択するにはどうすればよいですか? いくつかの例:

BeginUpdate/EndUpdate について:

BeginUpdate メソッドは、ポイントの追加が終了したときに関数を 1 回だけ再計算します。ポイントの追加が終了したときに関数を 1 回だけ再計算するには、EndUpdate メソッドを .BeginUpdate と共に使用する必要があります。したがって、BeginUpdate を使用してシリーズを更新する場合は、両方の方法を使用する必要があります。

その他の方法について:

メソッド間の違いは、ヘルプ ドキュメントにある定義によって説明されており、次の行で確認できます。

Series.RefreshSeries: RefreshSeries メソッドは、依存するすべてのシリーズにポイントを再計算するよう通知します。各シリーズには DataSource プロパティがあります。DataSource が有効な Series または DataSet コンポーネントである場合、Series は DataSource からすべてのポイント値を取得し、それらを Series ポイントとして追加します。RefreshSeries メソッドは、シリーズを強制的にクリアし、DataSource コンポーネントからすべてのポイントを再度取得します。リフレッシュ プロセスは、シリーズ ツリーを再帰的にトラバースします。

Series.Repaint:この Series メソッドは、親チャート全体を強制的に再描画します。通常、Repaint を直接呼び出すことはありません。プロパティを内部的に変更する場合、派生 TChartSeries コンポーネント内で使用できます。

TChart.Refresh:コントロールのクライアント領域を無効にし、それ自体とすべての子コントロールを即座に再描画します。

TChart.AutoRepaint: AutoRepaint false を使用して、(たとえば) チャート シリーズに多数のポイントを追加する際にチャートの再描画を無効にします。これにより、ポイントが追加されている間にチャートを再描画する必要がなくなります。AutoRepaint を再度有効にして、すべてのポイントが追加されたときに手動で Repaint コマンドを実行することができます。

役立つことを願っています。ご不明な点がございましたら、お気軽にお問い合わせください。

ありがとう、

于 2013-04-29T13:39:54.827 に答える