Как использовать одну метку, чтобы при многократном нажатии на нее отображались следующие элементы управления? - PullRequest
0 голосов
/ 30 сентября 2019

Я создаю визуально новый тип игры с Windows Forms, и у меня есть эта функция, в которой в правом нижнем углу формы есть надпись с надписью «Нажмите, чтобы продолжить». Я хотел найти более короткий путь, чтобы я мог использовать только одну метку для перехода к следующей последовательности (например, отображать следующий текст в текстовом поле).

Я попытался поместить несколько меток сверхудруг от друга, тогда, если метка уже нажата, я бы просто сделал ее свойство visible равным false для следующей последовательности.

        private void LblContinue_Click(object sender, EventArgs e)
        {
            lbl1.Visible = false;
            lbl2.Visible = true;
            charIndex = 0;
            lbl2.Text = string.Empty;
            Thread t = new Thread(new ThreadStart(this.TypewriteText2));
            t.Start();
            lblContinue.Visible = false;
        }

        private void LblContinue2_Click(object sender, EventArgs e)
        {
            lbl2.Visible = false;
            lbl3.Visible = true;
            charIndex = 0;
            lbl3.Text = string.Empty;
            Thread t = new Thread(new ThreadStart(this.TypeWriteText3));
            t.Start();
            lblContinue2.Visible = false;
        }

Хотя этот метод работает, я ожидаю, что, например, текст вtextBox отобразит «Hello», затем после нажатия lblContinue отобразит «World», затем, после повторного нажатия, отобразится «Everyone». Не берите в голову другие коды, я хотел бы подчеркнуть lblContinue.Visible и lblContinue2.Visible.

1 Ответ

0 голосов
/ 30 сентября 2019

Почему бы просто не использовать одну метку и некоторую другую переменную, например int, для отслеживания состояния. Каждый раз, когда вы нажимаете на ярлык, проверяйте текущее состояние и изменяйте текст соответствующим образом. Нечто похожее на это:

    string[] states = { "Hello", "World", "Everyone" };
    int currentState = 0;

    private void stateLabel_Click(object sender, EventArgs e)
    {
        stateLabel.Text = states[currentState];

        //Select next state
        currentState++;
        if (currentState >= states.Length)
        {
            currentState = 0;
        }
    }
...