Aide en page_load et null reference exception?!

Signaler
-
Bonjour,
Jai un probleme jessaie de creer le jeu "15"(un casse tete) sur visual studio 2012 avec asp.net, je dois dabord afficher les 16 cases dont une vide contenant des boutons numerotes dans le desordre de 1 a 15 puis cliquer sur une case adjacente a la case vide afin de reordonner tous les boutons de 1 a 15 , mais lorsque je clique sur le bouton il me donne comme erreur "Null reference exception" apres le debug jai compris que le tableau dans lequel je conserve mes boutons lors de leur creation se vide apres le clik... mais je ne comprends pas pourquoi ni comment y remedier ! aider moi , voici le code :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;


public partial class _Default : System.Web.UI.Page
{
Button[] array = new Button[16];
int[] arr = new int[15];


protected void Page_Load(object sender, EventArgs e)
{

generateTable();

}


private void generateTable()
{
Table tbl = new Table();

int rows = 4;
int cols = 4;

int k = 14;

Random rand = new Random();

if (!Page.IsPostBack)
{
for (int i = 0; i < 15; i++)
{
arr[i] = i + 1;
}
for (int i = 0; i < 15; i++)
{
while (k > 0)
{
int f = rand.Next(k);
int tmp = arr[k];
arr[k] = arr[f];
arr[f] = tmp;
k--;
}
}
}
k = 0;


for (int j = 0; j < rows; j++)
{
TableRow r = new TableRow();
for (int i = 0; i < cols; i++)
{
TableCell c = new TableCell();

Button b;

if (!Page.IsPostBack)
{
b = new Button();
b.Height = 50;
b.Width = 50;
b.BackColor = Color.FromArgb(rand.Next(0, 255), rand.Next(0, 255), rand.Next(0, 255));
b.Font.Name = "Comic Sans MS";
b.Click += b_Click;
b.ID = k.ToString();
b.Visible = true;


if (k != 15)
{
b.Text = arr[k].ToString();

}
else
{
b.Visible = false;
}
k++;
array[j * 4 + i] = b;

}
else {
b = array[j*4+i];
b.Click += b_Click;
}


c.Controls.Add(b);

if (j == 3 && i == 3)
c.Controls.Clear();
r.Controls.Add(c);




}
tbl.Controls.Add(r);


}
form1.Controls.Add(tbl);

}

void b_Click(object sender, EventArgs e)
{
Button b=(Button)sender;
int IndexofEmptyCase=-1;
int indexButton=Int32.Parse(b.ID);

if (array[indexButton] != null)
{
if (indexButton / 4 - 1 >= 0 && array[(indexButton / 4 - 1) * 4 + indexButton % 4] == null)
IndexofEmptyCase = (indexButton / 4 - 1) * 4 + indexButton % 4;

if (indexButton / 4 - 1 >= 0 && array[(indexButton / 4 + 1) * 4 + indexButton % 4] == null)
IndexofEmptyCase = (indexButton / 4 + 1) * 4 + indexButton % 4;

if (indexButton / 4 - 1 >= 0 && array[(indexButton / 4) * 4 + indexButton % 4 - 1] == null)
IndexofEmptyCase = (indexButton / 4) * 4 + indexButton % 4 - 1;

if (indexButton / 4 - 1 >= 0 && array[(indexButton / 4) * 4 + indexButton % 4 + 1] == null)
IndexofEmptyCase = (indexButton / 4) * 4 + indexButton % 4 + 1;
}

if (IndexofEmptyCase != -1)
{
Button b1=array[indexButton];
array[indexButton]=array[IndexofEmptyCase];
array[IndexofEmptyCase] = b1;

array[indexButton].Visible = false;
array[IndexofEmptyCase].Text = array[indexButton].Text;
array[IndexofEmptyCase].BackColor = array[indexButton].BackColor;
array[IndexofEmptyCase].Visible = true;

}
// if (gameisOver()) { }

}

}