在窗体构造函数中初始化的对象为null

本文关键字:对象 null 初始化 窗体 构造函数 | 更新日期: 2023-09-27 17:57:35

表单初始化时,对象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为空:/对此进行直接操作。chart1似乎没问题。当我调试我的代码时,chartOne是在构造函数中创建的,不是null,但当我按下上面提到的按钮时,它的行为就像上面一样。为什么我的chartOne在两者之间消失?该如何以正确的方式进行?

在窗体构造函数中初始化的对象为null

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

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

将其更改为;

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

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