我在表单初始化中遇到对象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消失在两者之间?以及如何正确地做呢?

最佳答案

您没有初始化属性ChartSettings chartOne,而是在构造函数内部创建实例,并且在构造函数完成时将其处置。这意味着您从未初始化过类级别的属性chartOne;因此它将始终为null。

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

更改为;

public ChartSettings chartOne{ get; set;}

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

07-27 19:31