0

重複の可能性:
実行時に C# ラベルをフォームに追加する

このエラーの原因がわかりません

オブジェクト参照がオブジェクト インスタンスに設定されていません。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

コード:

Line[] myLine = new Line[10];
int lineCount = 0;
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
    if (checkBox1.CheckState == CheckState.Checked)
    {
        myLine[lineCount].setPoint(new Point(e.X, e.Y));
        ++pointCount;
        if (pointCount == 2)
        {
            pointCount = 0;
            ++lineCount;
        }
    }
}
4

1 に答える 1

4

問題はこちら

myLine[lineCount].setPoint(new Point(e.X, e.Y));

Line使用する前に、新しい型要素をインスタンス化する必要があります。

行う:

if (checkBox1.CheckState == CheckState.Checked)
    {
        myLine[lineCount] = new Line(); //instantiate the array element
        myLine[lineCount].setPoint(new Point(e.X, e.Y));
        ++pointCount;
        if (pointCount == 2)
        {
            pointCount = 0;
            ++lineCount;
        }
}

Line はクラス (参照型) のようです。参照型の配列を作成すると、配列のすべての要素が の既定値になり、オブジェクトnullのインスタンス メソッドを呼び出すことができなくなりnullます。

MSDN の例 - 一次元配列

SomeType[] array4 = new SomeType[10];

このステートメントの結果は、 SomeType が値型か参照型かによって異なります。値型の場合、ステートメントは SomeType 型の 10 個のインスタンスの配列を作成します。SomeType が参照型の場合、ステートメントは 10 個の要素の配列を作成し、それぞれが null 参照に初期化されます。

于 2012-12-07T06:07:12.060 に答える