【发布时间】:2021-08-11 08:02:28
【问题描述】:
我正在用 Windows 窗体编写一个 FlashCard 应用程序。
现在我正在尝试从字符串数组中读取单词并将其传递给标签。然后要求用户写下这个词的翻译。最后将结果传递给标签框。
这是我的代码:
public partial class EnglishPolishScreen : Form
{
//English words array
string[] words = new string[] { "word1", "word2", "word3", "word4" };
// meanings words array
string[] wordB = new string[] { "slowo1", "slowo2", "slowo3", "slowo4" };
int element = 0;
Thread thread;
public EnglishPolishScreen()
{
InitializeComponent();
}
private void CloseAppEvent(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
private void button1_Click(object sender, EventArgs e)
{
thread = new Thread(Threadd);
thread.Start();
}
private void Threadd()
{
englishWord.Text = words[element];
counterLabel.Text = element + 1 + " of " + words.Length;
if (answerBox.Text.Equals(wordB[element]))
{
resultLabel.Text = "Good";
element++;
}
else
resultLabel.Text = "Bad";
if (element == words.Length)
{
element = 0;
}
}
private void EnglishPolishScreen_Load(object sender, EventArgs e)
{
englishWord.Text = words[element];
}
已编辑
伙计们,为什么我必须在按钮中单击两次才能看到数组中的下一个项目?为什么我可以在单击按钮后立即看到“错误”的答案?第二次点击后会出现“好”的答案。
已编辑 v2.xD 排序。无论如何,编写这样的代码是一种好方法吗?如果不是它怎么可能看起来更好?谢谢
问候
【问题讨论】:
-
当你遇到一个好的答案时,你不会停止循环。因此,在获得正确的条目后,您检查下一个条目。这是错误的。
-
尝试在后台线程中运行 UI 函数通常是不好的做法。 UI 应该由单个线程处理,如果您需要有后台线程,那么应该实现某种消息传递。在您的情况下,我看不出需要后台线程的任何原因。
-
您要做的第一件事是删除您在某处设置的 BackgroundWorker 和
CheckForIllegalCrossThreadCalls = false。 -- 不要尝试使用 WinForms 应用程序,因为它是控制台应用程序。该界面是事件驱动的,在控制台应用程序中用于获取用户输入的循环在这里不起作用。 -
非常感谢你 ;)
-
这个代码看起来怎么样?我该如何改进它?
标签: c# winforms loops textbox label