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