Windows формы C # метка backColor проблема изменения - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь создать версию игры «Simon» для форм, для которой ютубер под названием AngelSix предоставил пошаговое руководство. Исходный код представляет собой консольное приложение, и я пытаюсь создать версию, которая работает на формах Windows в Visual Studio. Цель игры состоит в том, чтобы пользователь повторил серию отображаемых цветов, которые я использую для отображения метки при изменении цвета фона. Метод, который я использую, состоит в том, чтобы заполнить список серией значений перечислений (синий, зеленый, красный, желтый), которые выбираются генератором случайных чисел и. Все это работает нормально, и я могу заставить backColor отображать любой отдельный элемент списка, явно вызывая индекс списка. Но я хочу, чтобы отображаемые цвета следовали за списком и меняли backColor в соответствии с каждой итерацией цикла for для элементов в списке (с Thread.Sleep 500 мс) между каждым, который пользователь затем может попытаться скопироватьпоследовательность нажатия кнопок с названиями «Синий», «Зеленый» и т. д.

Однако, когда я запускаю цикл for, чтобы отобразить последовательность цветов в списке, кажется, что каждый элемент списка не являетсяотображается как backColor, за исключением последнего цвета в списке. Требуется ли переустановка на каждой итерации или это просто что-то, что нельзя сделать таким образом?

1 Ответ

0 голосов
/ 11 ноября 2019

Если вы хотите пройти «список цветов», чтобы установить BackColor метки, лучше использовать « Таймер ». Вот простая демонстрация.

List<Color> color = new List<Color> { Color.Blue, Color.Green, Color.Red, Color.Yellow };

private System.Timers.Timer myTimer;
int index = 0;

private void Form1_Load(object sender, EventArgs e)
{
    this.myTimer = new System.Timers.Timer(500);
    this.myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
    this.myTimer.Enabled = true;
    this.myTimer.Start();
}

private void myTimer_Elapsed(object sender, ElapsedEventArgs e)
{
    // Set backcolor
    label1.BackColor = color[index];
    index++;
    // Check the index if out of range
    if (index >= color.Count)
    {
        myTimer.Stop();
    }
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...