0

我有以下设置:

一个带有 Colorgrid 的 TeeChart 控件,并添加了一个 Points Series:

grid = tChart2.Series[0] as Steema.TeeChart.Styles.ColorGrid;
points = tChart2.Series[1] as Steema.TeeChart.Styles.Points;

要初始化它们,我会:

Random rnd = new Random();
for (int i = 0; i < 128; i++)
{
    for (int j = 0; j < 128; j++)
    {
        grid.Add(j, rnd.Next(255), i);
    }
}

for (int i = 0; i < 20; i++)
{
    double x = rnd.Next();
    double y = rnd.Next();
    points.Add(x, y);
}

tChart2.Refresh();

然后我的表单上有一个按钮:

private void button1_Click(object sender, EventArgs e)
{
    Random rnd = new Random();

    for (int i = 0; i < 128; i++)
    {
        for (int j = 0; j < 128; j++)
        {
            grid.YValues[j + 128 * i] = rnd.Next(255);
        }
    }

    for (int i = 0; i < 20; i++)
    {
        points.SetNull(i);
    }

    for (int i = 0; i < rnd.Next(20); i++)
    {
        points.XValues[i] = rnd.Next(128);
        points.YValues[i] = rnd.Next(128);
    }

    points.BeginUpdate();
    points.EndUpdate();
}

但是这些点没有被绘制出来。当我删除包含 SetNull() 语句的 for 循环时,它们会被绘制,但我希望能够在不使用 Points.Clear( )/Points.Add(x, y) 方法。

我也尝试了以下各项,但没有区别。

points.TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.DoNotPaint;
points.TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.Ignore;
points.TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.Skip;

有谁知道如何做到这一点?

4

1 回答 1

0

好的,问题是当您将所有点设置为空时引起的。您必须知道如果您使用方法 SetNull 将点颜色设置为透明以使该点不可见。因此,如果你想解决你的问题,你只需要重置你想要可见的点的颜色,再次执行 SetNull 或手动更改点颜色并将操作与 TreatNullsStyle 设置为 Ignore 相结合。在我看来,我认为最好的选择是再次使用 SetNull,就像我在下一个代码中所做的那样:

    public Form1()
    {
        InitializeComponent();
        InitializeChart();
    }
    Steema.TeeChart.Styles.ColorGrid grid; 
    Steema.TeeChart.Styles.Points points;

    private void InitializeChart()
    {
        grid = new ColorGrid(tChart1.Chart);
        points = new Points(tChart1.Chart);
        tChart1.Aspect.View3D = false;
        Random rnd = new Random();
        for (int i = 0; i < 128; i++)
        {
            for (int j = 0; j < 128; j++)
            {
                grid.Add(i, rnd.Next(255), j);
            }
        }

        for (int i = 0; i < 20; i++)
        {
            double x = rnd.Next(100);
            double y = rnd.Next(100);
            points.Add(x, y);
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Random rnd = new Random();

        for (int i = 0; i < 128; i++)
        {
            for (int j = 0; j < 128; j++)
            {
                grid.YValues[j + 128 * i] = rnd.Next(255);
            }
        }

        for (int i = 0; i < 20; i++)
        {
            points.SetNull(i);
        }

        for (int i = 0; i < rnd.Next(20); i++)
        {
            points.XValues[i] = rnd.Next(128);
            points.YValues[i] = rnd.Next(128);
            points.SetNull(i, false);
        }
        points.TreatNulls = TreatNullsStyle.Ignore;
    }

您能否告诉我们以前的代码是否以正确的方式为您工作?

我希望会有所帮助。

谢谢,

于 2013-05-07T10:07:39.817 回答