kee*_*ler 1 c# null constructor class winforms
我的表单初始化对象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
}
Run Code Online (Sandbox Code Playgroud)
创建此类的原因是需要与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; 因此它将永远为空.
当您使用this.chartOne时,您声明要使用该类中定义的属性.
把它换成;
public ChartSettings chartOne{ get; set;}
public Form1(bool archivePlotPreview)
{
InitializeComponent();
chartOne = new ChartSettings(this.chart1, archivePlotPreview);
}
Run Code Online (Sandbox Code Playgroud)