Ошибка Имя не существует в данном контексте

День добрый, господа. На каждый тик timer1, генерируется кнопка, к ней должен генерироваться таймер tmrbtn, на тик которого должна удаляться кнопка и сам таймер.

Пишет имя a (кнопка) и tmrbtn (таймер к кнопке) не существуют в данном контексте. Как исправить? Код добавил ниже

        {
            Random rndtm = new Random();
            timer1.Interval = rndtm.Next(500, 1500);
            Random rnd = new Random();
            PictureBox a = new PictureBox();
            Controls.Add(a);
            a.Image = Image.FromFile("redbutton.png");
            a.Size = new Size(25, 25);
            a.SizeMode = PictureBoxSizeMode.StretchImage;
            a.Location = new Point(rnd.Next(0, this.Width - a.Width), rnd.Next(0, this.Height - a.Height));
            a.Click += A_Click;
            Timer tmrbtn = new Timer();
            tmrbtn.Interval = 2000;
            tmrbtn.Tick += Tmrbtn_Tick;
        }
            private void A_Click(object sender, EventArgs e)
            {
                Controls.Remove(sender as PictureBox);

                label2.Text = Convert.ToString(Convert.ToInt32(label2.Text) + 1);
            }
            private void Tmrbtn_Tick(object sender, EventArgs e)
            {
            Controls.Remove(a);
            Controls.Remove(tmrbtn);

            }

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

Автор решения: VoidStack

Хочу немного развить идею @Grundy. Это один из вариантов создания/удаления кнопок.

private void button1_Click(object sender, EventArgs e)
{
    string btname;

    // в счётчике устанавливаем кол-во кнопок
    for (int i = 0; i <= (int)numericUpDown1.Value - 1; i++)
    {
        // генерируем ключ, который будем исп.
        // при создании/удалении кнопки
        btname = "test" + i.ToString();

        // проверяем, если кнопки с именем btname - нет? - тогда создаём
        if ((Button)Controls[btname] is null)
        {
            var bt = new Button();

            // незабываем добавить кнопку в коллекцию
            Controls.Add(bt);
            // ставим наши кнопки в левый верхний угол, в ряд, с верху в низ
            bt.Location = new Point(12, 12 + (bt.Size.Height + 6) * i);
            // по ключу btname потом будем удалять кнопку
            bt.Name = btname;
            bt.Size = new Size(75, 23);
            bt.TabIndex = 0;
            bt.Text = bt.Name;
            bt.UseVisualStyleBackColor = true;
        }
    }
}

// если есть желание посмотреть, что есть на форме
private void button3_Click(object sender, EventArgs e)
{
    string ControlsColl = string.Empty;

    foreach (Control c in Controls)
    {
        ControlsColl += c.Name + " ";
    }

    MessageBox.Show(ControlsColl, "Information",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
}

private void button2_Click(object sender, EventArgs e)
{
    string btname;

    // просто открываем цикл
    for (int i = 0; i <= (int)numericUpDown1.Value - 1; i++)
    {
        // опять наш ключ
        btname = "test" + i.ToString();

        // та же самая проверка, что и при создании,
        // только мы уже хотим, чтоб этот control был создан
        if (!((Button)Controls[btname] is null))
        {
            // убираем его из коллекции, GC остальное сделает сам
            Controls.RemoveByKey(btname);
        }
    }
}
→ Ссылка