Ошибка Имя не существует в данном контексте
День добрый, господа. На каждый тик 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);
}
}
}