【问题标题】:calculations in dynamically generated controls in windows form applicationsWindows 窗体应用程序中动态生成的控件中的计算
【发布时间】:2014-02-17 07:02:31
【问题描述】:

我正在制作一个程序来学习如何在 Button_Click 事件的循环内动态生成控件,现在我正在尝试计算两个字段的乘法及其在第三个 TextBox 中的输出

代码:

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{


    unit.Location = new System.Drawing.Point(unitstartposition, unitstartpositionV);
    unit.Size = new System.Drawing.Size(100, 30);
    unit.Text = "";
    unit.Name = "unit" + i.ToString();

    rate.Location = new System.Drawing.Point(ratestartposition, ratestartpositionV);
    unit.Size = new System.Drawing.Size(100, 30);
    rate.Text = "";
    rate.Name = "rate" + i.ToString();

    amt.Location = new System.Drawing.Point(amtstartposition, amtstartpositionV);
    amt.Size = new System.Drawing.Size(100, 30);
    amt.Text = "";
    amt.Name = "amt" + i.ToString();

    panel1.Controls.Add(unit);
    panel1.Controls.Add(rate);
    panel1.Controls.Add(amt);


    unitstartpositionV += 30;
    ratestartpositionV += 30;
    amtstartpositionV += 30;

    unit = new TextBox();
    rate = new TextBox();
    amt = new TextBox();


}

现在我想像这样计算它

amt0.Text = (ConvertToInt32(unit0.Text) * ConvertToInt32(rate0.Text)).ToString();
amt1.Text = (ConvertToInt32(unit1.Text) * ConvertToInt32(rate1.Text)).ToString();

等等

最后我想总结一下所有的amt(i)。请帮助实现这一目标。

【问题讨论】:

    标签: c# .net winforms linq


    【解决方案1】:

    从'unitstartpositionV += 30;'行开始接下来,这是我想出解决这个问题的方法:

                unitstartpositionV += 30;
                ratestartpositionV += 30;
                amtstartpositionV += 30;
    
                unit = new TextBox();
                rate = new TextBox();
                amt = new TextBox();
                unit.Tag = rate;
                rate.Tag = amt;
                amt.Tag = unit;
    
    
                rate.TextChanged += rate_TextChanged;
                unit.TextChanged += unit_TextChanged;
            }
        }
    
        private void rate_TextChanged(object sender, EventArgs e)
        {
    
            var rate = sender as TextBox;
            var amt = rate.Tag as TextBox;
            var unit = amt.Tag as TextBox;
            Calc(rate.Text, unit.Text, amt);
        }
    
        private void unit_TextChanged(object sender, EventArgs e)
        {
            var unit = sender as TextBox;
            var rate = unit.Tag as TextBox;
            var amt = rate.Tag as TextBox;
            Calc(rate.Text, unit.Text, amt);
        }
    
        private void Calc(string rate, string unit, TextBox amt)
        {
            int rateInt;
    
            if (!int.TryParse(rate, out rateInt)) return;
    
            int unitInt;
            if (!int.TryParse(unit, out unitInt)) return;
    
            amt.Text = (rateInt * unitInt).ToString();
        }
    

    (不包括所有的总和)

    我以一种不同寻常的方式解决了这里的问题,以适应您所展示的风格。但实际上,您应该使用数组、列表或某种“集合”来保存您的控件。通过查看您的其他答案,我认为您尚未了解 IEnumerable。这就是您缺少的概念,它会使这种活动变得更加简单(尤其是“总和”要求)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多