iH InSaNeHKR
New Member
I created a 2D array \[code\]Board\[/code\], holding objects of \[code\]GameCell\[/code\].Default.aspx:\[code\]<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <link rel="stylesheet" href="http://stackoverflow.com/questions/13709048/includes/css/style.css" /></head><body> <form id="form1" runat="server"> <div> <h1>???? ?????</h1> <div id="Board"> <asp:Label ID="Label1" runat="server"></asp:Label> <asplaceHolder ID="MyBoard" runat="server" /> </div> </div> </form></body></html>\[/code\]Default.aspx.cs:\[code\]protected void Page_Load(object sender, EventArgs e){ Game.CreateControls();}protected void Page_Init(object sender, EventArgs e){ if (!this.IsPostBack) { Game.Set(MyBoard, Label1); Game.Reset(); }}\[/code\]GameCell.cs:\[code\]public class GameCell : ImageButton{ public Position Position; // Justs holds the properties of Row and Col public CellType Type; public GameCell(Position Pos) { this.Position = new Position(Pos); this.Type = CellType.Empty; }}\[/code\]Game.cs:\[code\]public class Game{ public const int R = 6; public const int C = 9; public static GameCell[,] Board; public static PlaceHolder Holder; public static Label Log; public static CellType CurrentType; public static string[] Images = new string[] { "red", "empty", "blue" }; public static void Set(PlaceHolder Holder, Label Log) { Game.Reset(); Game.Holder = Holder; Game.Log = Log; } public static void CreateControls() { for (int i = 0; i < Game.R; i++) { for (int j = 0; j < Game.C; j++) { Game.Board[i, j].ImageUrl = Game.ImageUrlByType(Game.Board[i, j].Type); Game.Board[i, j].ID = i + "_" + j; Game.Board[i, j].Click += new ImageClickEventHandler(Image_Click); Game.Holder.Controls.Add(Game.Board[i, j]); } } } public static void Image_Click(object sender, EventArgs e) { int row = 0; int col = int.Parse(((GameCell)sender).ID[2].ToString()); if (Game.Board[row, col].Type == CellType.Empty) { while (row < Game.R - 1 && Game.Board[row, col].Type == CellType.Empty) { row++; } Game.SetImage(row, col); Game.CurrentType = (CellType)(-(int)Game.CurrentType); Log.Text = col + " " + row + " " + Game.CurrentType; Game.Board[row, col].Enabled = false; } } public static void SetImage(int r, int c) { Game.Board[r, c].Type = Game.CurrentType; Game.Board[r, c].ImageUrl = Game.ImageUrlByType(Game.CurrentType); } public static void Reset() { Game.Board = new GameCell[R, C]; Game.CurrentType = CellType.Blue; for (int i = 0; i < Game.R; i++) { for (int j = 0; j < Game.C; j++) { Game.Board[i, j] = new GameCell(new Position(i, j)); } } } public static string ImageUrlByType(CellType t) { return "includes/images/" + Game.Images[(int)t + 1] + ".png"; }}\[/code\]The controls are rendered, and are clickable when first launching the project, but after I do click one of them, no controls are added to my Holder (\[code\]MyBoard\[/code\]).Why is this happening?Edit:I found the solution. passing \[code\]MyBoard\[/code\] as an argument to \[code\]CreateControls\[/code\] did it. Maybe the reference wasn't reliable anymore (I saved it in an object) after page_load.