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
}

このクラスを作成する理由は、CSV 保存オプション、最小/最大マーカー オプションなどの Chart オブジェクト (デザイナー ウィンドウに追加された chart1) に関連する追加の変数が必要であるためです。上で見ることができます。それに chart1 を割り当て、さらにコードで this.chart1 の代わりに chartOne.ChartObject を使用したい思います

新しい Form1 インスタンスを作成すると、ウィンドウが表示され、chart1 が表示されますが、chartOne.ChartObject参照を使用する「データの読み込み」ボタンを押すと、chartOne が null であるためクラッシュします:/ this.chart1 に対する直接操作はわかった。コードをデバッグすると、chartOne はコンストラクターで作成され、null ではありませんが、前述のボタンを押すと、とにかく上記のように動作します。chartOne が途中で消えるのはなぜですか? そして、それはどのように正しい方法で行われるべきですか?

4

2 に答える 2

7

プロパティを初期化していませんChartSettings chartOneが、コンストラクター内でインスタンスを作成しており、コンストラクターが終了すると破棄されます。これは、クラス レベル プロパティ chartOne を初期化していないことを意味します。したがって、常に null になります。

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 は null のままです。

于 2013-02-05T09:58:49.463 に答える