WinForm中Label文本不显示求助:数组批量赋值无效
问题解决:WinForm中数组赋值后Label未更新显示
问题根源
你当前代码里的seq_Left、seq_Right这类数组,存储的是Label控件Text属性的值副本,而非控件本身的引用。当你修改数组元素时,只是改变了数组里的字符串内容,并没有同步更新到Label控件的Text属性,所以界面上看不到任何变化。
方案1:存储控件引用(推荐)
把字符串数组改成对应控件类型的数组,直接操作控件的Text属性,既简洁又能实时更新界面:
private void SetUpGame() { // 存储Label/TextBox控件的引用,而非Text属性的值 Label[] seq_Left = { lblNum1Left, lblNum2Left, lblNum3Left, lblNum4Left, lblNum5Left }; Label[] seq_Right = { lblNum1Right, lblNum2Right, lblNum3Right, lblNum4Right, lblNum5Right }; Label[] seq_Symbol = { lblSymbol1, lblSymbol2, lblSymbol3, lblSymbol4, lblSymbol5 }; TextBox[] seq_Answer = { txtAnswer1, txtAnswer2, txtAnswer3, txtAnswer4, txtAnswer5 }; for (int i = 0; i < 5; i++) { int numA = rnd.Next(10, 20); int numB = rnd.Next(0, 9); seq_Answer[i].Text = ""; switch (Maths[rnd.Next(0, Maths.Length)]) { case "Add": total[i] = numA + numB; seq_Symbol[i].Text = "+"; break; case "Subtract": total[i] = numA - numB; seq_Symbol[i].Text = "-"; break; case "Multiply": total[i] = numA * numB; seq_Symbol[i].Text = "x"; break; } seq_Left[i].Text = numA.ToString(); seq_Right[i].Text = numB.ToString(); } }
方案2:修改数组后同步赋值回控件
如果不想调整数组类型,也可以在循环结束后,把数组中的字符串值重新赋值给对应控件的Text属性,但这种方式会增加冗余代码,不如方案1高效:
private void SetUpGame() { string[] seq_Left = new string[5]; string[] seq_Right = new string[5]; string[] seq_Symbol = new string[5]; string[] seq_Answer = new string[5]; for (int i = 0; i < 5; i++) { int numA = rnd.Next(10, 20); int numB = rnd.Next(0, 9); seq_Answer[i] = ""; switch (Maths[rnd.Next(0, Maths.Length)]) { case "Add": total[i] = numA + numB; seq_Symbol[i] = "+"; break; case "Subtract": total[i] = numA - numB; seq_Symbol[i] = "-"; break; case "Multiply": total[i] = numA * numB; seq_Symbol[i] = "x"; break; } seq_Left[i] = numA.ToString(); seq_Right[i] = numB.ToString(); } // 将数组值同步回控件 lblNum1Left.Text = seq_Left[0]; lblNum2Left.Text = seq_Left[1]; lblNum3Left.Text = seq_Left[2]; lblNum4Left.Text = seq_Left[3]; lblNum5Left.Text = seq_Left[4]; lblNum1Right.Text = seq_Right[0]; lblNum2Right.Text = seq_Right[1]; lblNum3Right.Text = seq_Right[2]; lblNum4Right.Text = seq_Right[3]; lblNum5Right.Text = seq_Right[4]; lblSymbol1.Text = seq_Symbol[0]; lblSymbol2.Text = seq_Symbol[1]; lblSymbol3.Text = seq_Symbol[2]; lblSymbol4.Text = seq_Symbol[3]; lblSymbol5.Text = seq_Symbol[4]; txtAnswer1.Text = seq_Answer[0]; txtAnswer2.Text = seq_Answer[1]; txtAnswer3.Text = seq_Answer[2]; txtAnswer4.Text = seq_Answer[3]; txtAnswer5.Text = seq_Answer[4]; }
内容的提问来源于stack exchange,提问作者Ahmet
相关产品推荐
相关产品推荐

