学习外语程序C#

时间:2019-02-17 16:07:26

标签: c# winforms

我正在编写一个词汇程序。 C#Windows窗体。

程序操作说明:

  • 使用按钮选择带有“ PL”和“ ENG”字样的文本文件的位置。 (两个单独的文件)

  • 单击开始按钮以启动程序

  • 木板上的第一个单词出现在标签中

  • 我正在将单词翻译到文本框中,然后弹出消息框“ OK”或“ WRONG”

这里出现一个问题。该程序而不是每次等到在文本框中引入一个新单词时才会循环,它会循环运行,更改标签中的问题并显示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 :(得分:0)

这种方法行不通。 如果使用WinForms,则可以通过事件来完成。因为我不会说您的语言,所以我将快速使用英语变量名称。

这可能是做到这一点的一种方法:我使用了textBox中的“ TextChanged”事件。

    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。例如,单击按钮。另一种解决方案是在反馈中使用标签,而不是消息框。这样,用户将无需单击任何东西,而会立即看到他是否正确。