1

我的表单初始化中的对象 ChartSettings 有问题。

这是我自己的类添加下面的Form1代码:

public partial class Form1 : Form
{


    public Form1(bool archivePlotPreview)
    {
        InitializeComponent();
        ChartSettings chartOne = new ChartSettings(this.chart1, archivePlotPreview);
    }

    public ChartSettings chartOne;

    //Form1 variables and functions
}

public class ChartSettings
{

    public ChartSettings(Chart settingsRelatedChart, bool archivePlotPreview)
    {
        // przypisanie wykresu do ktorego odnosza sie ustawienia
        ChartObject = settingsRelatedChart;
        ChartObject.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart1_MouseMove);

        barchivePlotPreview = archivePlotPreview;

    }

    // other variables and functions
}

创建此类的原因是需要与图表对象(在设计器窗口中添加的图表 1)相关的其他变量,例如 CSV 保存选项、最小/最大标记选项等。所以在 Form1 的构造函数中,我添加了创建我的 ChartSettings 对象的行可以在上面看到。它将 chart1 分配给它,在进一步的代码中我想使用chartOne.ChartObject而不是this.chart1

当我创建新的 Form1 实例时,会显示一个窗口,chart1 是可见的,等等。但是当我按下使用chartOne.ChartObject引用的“加载数据”按钮时,它会崩溃,因为 chartOne 为空:/ 对 this.chart1 的直接操作似乎是行。当我调试我的代码时,chartOne 是在构造函数中创建的,并且不是 null,但是当我按下提到的按钮时,它的行为就像上面一样。为什么我的 chartOne 在两者之间消失?应该如何以正确的方式完成?

4

2 回答 2

7

您没有初始化属性ChartSettings chartOne,而是在构造函数中创建了一个实例,并且在构造函数完成时将其释放。这意味着您从未初始化类级别属性 chartOne;因此它将始终为空。

当您使用 this.chartOne 时,您声明要使用该类中定义的属性。

将其更改为;

public ChartSettings chartOne{ get; set;}

public Form1(bool archivePlotPreview)
{
    InitializeComponent();
    chartOne = new ChartSettings(this.chart1, archivePlotPreview);
}
于 2013-02-05T09:56:48.187 回答
3

您在构造函数中创建的 ChartSettings chartOne 与您在类中声明的全局对象不同。构造函数中的 ChartSettings chartOne 仅在该范围内可用,因此该类的 ChartSettings chartOne 保持为空。

于 2013-02-05T09:58:49.463 回答