不能重新绘制已设置为NULL的点

本文关键字:设置 NULL 的点 绘制 新绘制 不能 | 更新日期: 2023-09-27 18:12:28

我有以下设置:

一个带有colorrid的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;

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

不能重新绘制已设置为NULL的点

好的,问题是当你设置null所有的点。你必须知道,如果你使用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;
    }

你能告诉我们之前的代码对你来说是否正确吗?

我希望这对你有帮助。

谢谢,