Странности префиксного декремента и условия в программе на C# Winforms

При нажатии на кнопку, чуть ниже её добавляется ещё одна кнопка и это должно быть возможным всего 8 раз

Button[] bt = new Button[8];
    private int i { get; set; } = 1;
    private void home_Load(object sender, EventArgs e)
    {
        bt[0] = addButton1;
    }
    public void addButton1_Click(object sender, EventArgs e)
    {
        if (i <= 8)
        {
            Button b = (Button)sender;
            bt[i] = new Button();

            bt[i].BackColor = Color.Transparent;
            bt[i].FlatAppearance.BorderSize = 0;
            bt[i].FlatAppearance.MouseDownBackColor = Color.Transparent;
            bt[i].FlatAppearance.MouseOverBackColor = Color.Transparent;
            bt[i].FlatStyle = FlatStyle.Flat;
            bt[i].ForeColor = Color.White;
            bt[i].Image = Properties.Resources.add;
            bt[i].Location = new Point(543, 132);
            bt[i].Name = "addButton" + i.ToString();
            bt[i].Size = new Size(37, 28);
            bt[i].UseVisualStyleBackColor = false;
            bt[i].Location = new Point(b.Location.X, b.Location.Y + 32);

            Controls.Add(bt[i]);

            bt[i].Click += new EventHandler(addButton1_Click);

            bt[i - 1].Image = Properties.Resources.remove;
            i++;
        }
    }

Во-первых, я не совсем понимаю почему если стоит условие if(i<=8) я всё равно могу нажать на последнюю (восьмую) кнопку и даже получить после этого ошибку.

Во-вторых, у меня была некая проблема, а точнее не добавлялись кнопки. Я долго не мог понять в чём проблема, а потом методом тыка починил, заменив:

bt[--i].Image = Properties.Resources.remove;

на:

bt[i - 1].Image = Properties.Resources.remove;

И всё начало работать


Ответы (2 шт):

Автор решения: стасевич

не знаю как с# , но в java индексация массива начинается с 0.
и массив размерностью [8] имеет индексы от 0 до 7 (длинна массива - 1)

if (i <= 8)  

и здесь при проверке i на равенство 8ми получим выход за пределы массива т.к. последний элемент у нас под индексом 7.

попробуйте условие проверки i до 8 if (i < 8)

→ Ссылка
Автор решения: Igor
    if (i < 8)
    {
      ...
      bt[i].Image = Properties.Resources.remove;
    }
→ Ссылка