Изменить это:
protected static Button[] buttons;
На это:
protected List<Button> buttons;
И это:
private Button[] findButtons() {
List<Button> tmpButtons = new List<Button>();
foreach (var item in board.Controls) {
if (item is Button) {
tmpButtons.Add((Button)item);
}
}
return tmpButtons.ToArray();
}
На это:
private List<Button> findButtons() {
return board.Controls.OfType<Button>().ToList();
}
И, наконец, это:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
initialConditions();
}
}
На это:
protected void Page_PreInit(object sender, EventArgs e) {
initialConditions();
}
Обратите внимание, что каждое из этих изменений приводит к меньшему коду , чем у вас было раньше.
Для этого последнего изменения помните, что каждое серверное событие (включая нажатие кнопок) представляет собой полный цикл между веб-сервером и браузером с совершенно другим экземпляром класса страницы. Вы должны перестраивать этот массив в каждый через жизненный цикл страницы, и если вы хотите, чтобы ViewState работал, вам нужно сделать это до Page_Load()
.