Странности префиксного декремента и условия в программе на 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)