无法重绘已设置为NULL的点

时间:2013-05-06 10:44:19

标签: c# .net teechart

我有以下设置:

带有Colorgrid的TeeChart控件,并添加了Points系列:

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;

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

1 个答案:

答案 0 :(得分:0)

好的,当您将所有点设置为null时会导致问题。您必须知道是否使用方法SetNull将点颜色设置为透明以使点不可见。因此,如果要解决问题,只需重置想要显示的点的颜色,再次执行SetNull或手动更改点颜色,并将操作与设置为忽略的TreatNullsStyle组合。在我看来,我认为最好的选择是再次使用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;
    }

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

我希望能有所帮助。

谢谢,