2

の多次元配列originalArray[X_VECTOR, Y_VECTOR]がありMyButtonsます。

MyButton は単純に作成されたクラスです (不要かもしれません):

class MyButton : Button
{
    private int[] id;

    public MyButton()
    {
        id = new int[2];
    }

    public int[] ID
    {
        get
        {
            return id;
        }

        set
        {
            id = value;
        }
    }
}

ループでは、ボタンの配列を埋めます:

public void fillArray() {
    originalArray = new MyButton[X_VECTOR, Y_VECTOR];
    int count_buttons = 0;
    for (int i = 0; i < X_VECTOR; ++i)
    {
        for (int j = 0; j < Y_VECTOR; ++j)
        {
            count_buttons++;
            MyButton btn = new MyButton();
            btn.Name = "btn " + count_buttons;
            btn.ID[0] = i;
            btn.ID[1] = j;
            originalArray[i, j] = btn;   
        }
     }
}

move button to right side after click今、私たちは配列にしたいと思います:

protected void MyBtnClick(object sender, EventArgs e) {
    if (sender != null) {
        MyButton myclickbutton = (MyButton)sender;
        int x = myclickbutton.ID[0];
        int y = myclickbutton.ID[1];

        MyButton temp = originalArray[x, y];
        temp.Location = new Point(curr_pos_x + 55, curr_pos_y);
        temp.ID[0] = x; 
        temp.ID[1] = y + 1; // new coordinate y
        originalArray[x, y + 1] = temp;
        temp = null;
        // originalArray[x, y] = null;
    }
}

NULL は設定されません。何が間違っているのですか?

このイラストが必要です:

BEFORE CLICK:

originalArray[0,0] = btn instance; 
originalArray[0,1] = null;

AFTER CLICK:

originalArray[0,0] = null; 
originalArray[0,1] = btn instance;

編集: これを試したとき:

protected void MyBtnClick(object sender, EventArgs e) {
    if (sender != null) {
        MyButton myclickbutton = (MyButton)sender;
        int x = myclickbutton.ID[0];
        int y = myclickbutton.ID[1];

        myclickbutton.Location = new Point(curr_pos_x + 55, curr_pos_y);
        myclickbutton.ID[0] = x;
        myclickbutton.ID[1] = y + 1;
        originalArray[x, y + 1] = myclickbutton;
        originalArray[x, y] = null;
    }
}

それは多分大丈夫ですが、これをテストしていたとき

if ((originalArray[i, j].Name == testArray[i, j].Name)) ...

この行は私を取得しますNullReferenceException

この関数は上記の fillArray と同じで、これをコンストラクターで呼び出します。

public void createTestArray() {
        testArray = new MyButton[X_VECTOR, Y_VECTOR];
        int count_buttons = 0;
        for (int i = 0; i < X_VECTOR; ++i)
        {
            for (int j = 0; j < Y_VECTOR; ++j)
            {
                count_buttons++;
                MyButton btn = new MyButton();
                btn.Name = "btn " + count_buttons;
                testArray[i, j] = btn;   
            }
         }
}
4

2 に答える 2

1

配列の項目の 1 つを null にしましたが、それらすべてを調べると、null 項目が例外をスローします。名前を比較する前にアイテムがnullでないかどうかを確認するだけで、例外は発生しません

于 2013-05-13T13:34:17.580 に答える
0

というメッセージが表示されますNull is not set。多次元配列の元のエントリxとエントリを nullに戻す行をコメントアウトしました。y現時点で持っているものは次のとおりです。

originalArray[0,0] = btn instance; 
originalArray[0,1] = temp;

最後の行からコメントを削除するとbtn instance0,0.

于 2013-05-13T12:44:50.043 に答える