在表单构造函数中初始化的对象为null

时间:2013-02-05 09:54:29

标签: c# winforms class constructor null

我的表单初始化对象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
}

创建此类的原因是需要与Chart对象相关的其他变量(在Designer窗口中添加了chart1),如CSV保存选项,最小/最大标记选项等。因此,在Form1的构造函数中,我添加了行创建我的ChartSettings对象如上所示。它为chart1提供了帮助,在进一步的代码中,我想使用 chartOne.ChartObject 而不是 this.chart1

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

2 个答案:

答案 0 :(得分:7)

您没有初始化属性ChartSettings chartOne,但是您正在构造函数中创建一个实例,并在构造函数完成时处理它。这意味着你从未初始化类级属性chartOne;因此它将始终为空。

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

将其更改为;

public ChartSettings chartOne{ get; set;}

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

答案 1 :(得分:3)

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