Программа для изучения иностранных слов C # - PullRequest
0 голосов
/ 17 февраля 2019

Я нахожусь в процессе написания словарной программы.C # Windows Form.

Описание работы программы:

  • Используйте кнопки для выбора местоположения текстовых файлов со словами «PL» и «ENG».(два отдельных файла)

  • Нажмите кнопку «Пуск», чтобы запустить программу

  • первое слово с доски появится на этикетке

  • Я перевожу слово в текстовое поле, и появляется окно сообщения «ОК» или «НЕПРАВИЛЬНО»

И здесь возникает проблема.Программа вместо того, чтобы каждый раз ждать, пока я введу новое слово в текстовое поле, она зацикливается, вопросы в метке меняются и отображается MessageBox.Как лучше всего это сделать, чтобы программа работала правильно?`` `[

private void sprawdzButton_Click(object sender, EventArgs e)
    {
        BazaSlow.bazaPolskichSlowek = _fileReader.Read(adresPlikuPL);
        BazaSlow.bazaAngielskichSlowek = _fileReader.Read(adresPlikuANG);
        string odpowiedz = odpTextBox.Text;
        int i = 0;

        while (i < BazaSlow.bazaPolskichSlowek.Length)
        {
            trescSlowkaLabel.Text = BazaSlow.bazaPolskichSlowek[i];

            if (odpowiedz.Equals(BazaSlow.bazaAngielskichSlowek[i].ToLower()))
            {
                MessageBox.Show("OK");
            }
            else
            {
                MessageBox.Show("ŹLE");
            }
            i++;

        }

    }

1 Ответ

0 голосов
/ 17 февраля 2019

Этот подход не совсем работает.Если вы используете WinForms, вы можете сделать это с помощью событий.Я быстро использую английские имена переменных, так как я не говорю на вашем языке.

Это может быть один из подходов к этому: я использовал событие "TextChanged" из textBox.

    string[] wordsLanguage1;
    string[] wordsLanguage2;
    int currentIndex = 0;

    private void Form1_Load(object sender, EventArgs e)
    {
        wordsLanguage1 = System.IO.File.ReadAllLines("somePath1");
        wordsLanguage2 = System.IO.File.ReadAllLines("somePath2");
    }

    private void ReportAndCheckInput(string input)
    {
        if (input.ToLower().Equals(wordsLanguage2[currentIndex].ToLower())) {
            //right translation
            currentIndex++;
            label1.Text = wordsLanguage1[currentIndex];
            textBox1.Text = "";
        }
        else
        {
            //wrong translation
        }
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        ReportAndCheckInput(textBox1.Text);
    }

Теперь этот подход использует событие TextChanged.Таким образом, метод ReportAndCheckInput будет вызываться при каждом изменении текста.Это означает, что ваша обратная связь будет появляться при каждом нажатии клавиши, что было бы нехорошо.Вы можете использовать любое другое событие вместо TextChanged.Например, нажатие кнопки.Другим решением будет использование ярлыка для обратной связи, а не окна сообщения.Тогда пользователю никогда не придется ничего щелкать, кроме как мгновенно увидеть, был ли он прав.

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