C# WinForm表单输入答案错误时如何保持label标签值持续显示
问题根因
- 逻辑判断完全倒置:现有代码中
if (guess != label1.Text)分支弹出「猜对」提示,和实际需求完全相反。 - 存在阻塞UI的死循环:点击事件中的
while循环无任何退出条件,进入循环后既不会更新guess变量的值,也不会修改label1.Text的内容,会持续弹出消息框阻塞UI线程,导致窗体无法正常重绘,所以出现Label内容消失、不显示原有单词的问题。
修正代码
你可以直接替换button1_Click的逻辑即可:
private void button1_Click(object sender, EventArgs e) { string guess = textBox1.Text; // 直接判断即可,不需要循环,每次点击按钮都会重新获取输入内容 if (guess == label1.Text) { MessageBox.Show("You got it right"); // 如果猜对后要刷新下一个单词可以取消注释下面这句 // label1.Text = word[rnd.Next(0, word.Length)]; // 猜对后清空输入框 textBox1.Text = string.Empty; } else { MessageBox.Show("You got it wrong"); // 猜错后清空输入框方便下次输入 textBox1.Text = string.Empty; // 输入错误时主动把焦点切回输入框 textBox1.Focus(); } }
补充说明
WinForm的UI更新是在主线程中执行的,如果你在主线程执行死循环、耗时操作,都会导致界面无法正常重绘、出现卡顿、控件内容不显示的问题,避免在控件的事件回调中写无退出条件的循环逻辑。
内容的提问来源于stack exchange,提问作者cookie
相关产品推荐
相关产品推荐

