繁体   English   中英

Windows窗体应用程序中动态生成的控件中的计算

[英]calculations in dynamically generated controls in windows form applications

我正在编写一个程序来学习如何在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)。 请帮助实现这一目标。

从“ 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。 那就是您所缺少的概念,它将使这种活动变得更加简单(尤其是“所有总和”的要求)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM