Почему пропадают созданные методом кнопки? C# Windows Forms
Есть модуль который создаёт таблицу с кнопками, если запустить его отдельно (без каких-либо последующих функций) - всё работает, кнопки появляются и нажимаются, но стоит только запустить следующий метод (который должен брать случайную кнопку из таблицы и красить её на пару секунд в красный), как программа перестаёт выводить кнопки на форму. Она не висит, цикл во втором модуле крутится, но почему-то кнопки с первого метода не появляются, в чём дело?
Заранее спасибо
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace WinFormsApp3
{
public partial class Form1 : Form
{
int I, J;
List<Button> buttons = new List<Button>();
bool progress = false;
public Form1()
{
InitializeComponent();
}
private void MakeButtons(int i, int j)
{
List<Button> buttons = new List<Button>();
for (int k = 0; k < i; k++)
{
for (int h = 0; h < j; h++)
{
Button button = new Button
{
Location = new Point(30 + k * 30, 60 + h * 30),
Size = new Size(25, 25),
Visible = true,
//BackColor = Color.Red
};
buttons.Add(button);
this.Controls.Add(button);
}
}
this.buttons = buttons;
}
private void SetTarget()
{
Random random = new Random();
while (!progress)
{
int choosenIndex = random.Next(buttons.Count);
Color def = buttons[choosenIndex].BackColor;//запоминаем цвет
buttons[choosenIndex].BackColor = Color.Red;
buttons[choosenIndex].Visible = true;
Thread.Sleep(2000);
buttons[choosenIndex].BackColor = def; //возвращаем его через 2 секунды
}
}
private void buttonStart_Click(object sender, EventArgs e)
{
int.TryParse(textBoxLines.Text, out I);
int.TryParse(textBoxColumns.Text, out J);
MakeButtons(I,J);
//SetTarget();
}
}
}
Ответы (1 шт):
Только что проверил твой код, сначала проверил без цикла - все работает, потом проверил цикл с 3 итерациями, вот код:
private void SetTarget()
{
Random random = new Random();
int a = 0;
while (a<3)
{
int choosenIndex = random.Next(buttons.Count);
Color def = buttons[choosenIndex].BackColor;//запоминаем цвет
buttons[choosenIndex].BackColor = Color.Red;
buttons[choosenIndex].Visible = true;
Thread.Sleep(2000);
buttons[choosenIndex].BackColor = def; //возвращаем его через 2 секунды
a++;
}
}
также выводит кнопки и метод отрабатывает (правда вроде как не совсем так, как должен). Я не силен в асинхронном программировании, но точно можно сказать, что проблема в бесконечном цикле, попробуй сделать условие выхода из цикла и поработать над кодом внутри цикла.
