Windows Forms动态文本框值存储及求和均值计算问题
解决方案:动态管理文本框并计算总和与平均值
核心思路
用**List<TextBox>**全局存储所有动态生成的文本框,它支持动态添加元素,完美解决数组长度固定的问题。同时添加输入验证,避免非数字输入导致程序崩溃。
步骤1:全局声明存储文本框的List
在窗体类中定义全局List,用于保存所有动态生成的文本框:
// 全局存储所有动态生成的文本框 private List<TextBox> dynamicTextBoxes = new List<TextBox>();
步骤2:修改文本框生成逻辑,加入List管理
每次创建新文本框时加入List,同时在重新生成前清空旧控件和List,避免重复:
int newtextboxn = 8; int alingment = 200; public TextBox addnewtextbox() { TextBox textbox = new TextBox(); this.Controls.Add(textbox); // 将新文本框加入全局List dynamicTextBoxes.Add(textbox); if (newtextboxn % 18 == 0) { alingment += 200; newtextboxn = 8; textbox.Top = newtextboxn * 27; textbox.Left = alingment; } else { textbox.Top = newtextboxn * 27; textbox.Left = alingment; } newtextboxn = newtextboxn + 1; return textbox; } public void printTextbox(int radius) { // 清空之前生成的文本框和List,避免重复 foreach (var tb in dynamicTextBoxes) { this.Controls.Remove(tb); tb.Dispose(); } dynamicTextBoxes.Clear(); // 重置布局参数,防止下次生成位置错乱 newtextboxn = 8; alingment = 200; for (int i = 0; i < radius; i++) { addnewtextbox(); } } private void printTheBox_Click(object sender, EventArgs e) { // 验证输入是否为有效正整数 if (int.TryParse(numberofnumbers.Text, out int radius) && radius > 0) { printTextbox(radius); } else { MessageBox.Show("请输入有效的正整数"); } }
步骤3:修改计算逻辑,遍历List统计数值
遍历全局List,提取每个文本框的有效数值,计算总和与平均值:
private void doTheMath_Click(object sender, EventArgs e) { int sum = 0; int validInputCount = 0; foreach (var tb in dynamicTextBoxes) { // 验证输入是否为有效整数 if (int.TryParse(tb.Text, out int num)) { sum += num; validInputCount++; } else { MessageBox.Show($"文本框内容「{tb.Text}」不是有效整数,将被忽略"); } } // 处理无有效输入的情况 if (validInputCount == 0) { total.Text = "0"; averagee.Text = "0"; MessageBox.Show("没有有效的数字输入"); return; } double average = (double)sum / validInputCount; total.Text = sum.ToString(); averagee.Text = average.ToString("F2"); // 保留两位小数,显示更友好 }
内容的提问来源于stack exchange,提问作者hexxetexxeh
相关产品推荐
相关产品推荐

