Когда вы играете в тик-так, лучше отделить свою логику подсчета очков от событий.
Вам следует создать эту переменную в своей форме:
private Button[][] _buttons = null;
Затем вForm_Load
сделать это:
_buttons = new []
{
new [] { button1, button2, button3 },
new [] { button4, button5, button6 },
new [] { button7, button8, button9 },
};
Теперь вы можете создать метод, который возвращает список строк, который разрезает сетку по горизонтали, вертикали и диагонали:
private IEnumerable<string> GetSlices() =>
Enumerable
.Range(0, 3)
.SelectMany(n => new[]
{
String.Join("", Enumerable.Range(0, 3).Select(m => _buttons[m][n].Text)),
String.Join("", Enumerable.Range(0, 3).Select(m => _buttons[n][m].Text))
})
.Concat(new[]
{
String.Join("", Enumerable.Range(0, 3).Select(x => _buttons[x][x].Text)),
String.Join("", Enumerable.Range(0, 3).Select(x => _buttons[x][2 - x].Text))
});
Затем,всякий раз, когда вы обновляете текст на кнопке, вы можете определить, кто выиграл так:
var slices = GetSlices();
if (slices.Any(s => s == "XXX"))
{
MessageBox.Show("X Won!");
}
if (slices.Any(s => s == "OOO"))
{
MessageBox.Show("O Won!");
}