0

Кнопка button1 нажимается 1 раз, вместо 10(заложено через цикл for).

Неоходимо организовать смену цвета фона WF раз в секунду 10 раз.

namespace WfChangeColor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();       
        }
    private void Form1_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 10; i++)
        {
            button1.PerformClick(); //нажатие кнопки 10 раз???
        }

    }

    private void button1_Click(object sender, EventArgs e)
    {
        changeFormColor(); //меняет цвет через секунду
    }

    public void changeFormColor()
    {
        Thread.Sleep(1000);
        Random random = new Random();
        this.BackColor = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256));
    }
}

} ```

2 Answers2

4

Sleep использовать не надо, он будет блокировать UI поток, вместо него нужен таймер. В конструкторе заводите его:

var timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();

Интервал поставите тот, который нужен вам.

void timer_Tick(object sender, EventArgs e)
{
    // тут ваш код по смене цвета
    Random random = new Random();
    this.BackColor = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256));
}

Зачем нажимать кнопку 10 раз я не знаю, но таймер можно запускать по нажатию кнопки в button1_Click, если надо.

demonplus
  • 878
  • Спасибо огромное! С таймером все сразу заработало. Сейчас изучу что и как. – deschainer Apr 23 '22 at 13:31
1

Можно и без таймера обойтись. С минимальными изменениями в вашем коде:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    private async void Form1_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 10; i++)
        {
            await Task.Delay(1000);
            button1.PerformClick();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ChangeFormColor();
    }

    private void ChangeFormColor()
    {
        Random random = new Random();
        this.BackColor = Color.FromArgb(random.Next(255), random.Next(255), random.Next(255));
    }
}