winforms C#试图制作一个计算器代码,将结果循环到文本框的其他列?

nukf8bse  于 2023-08-07  发布在  C#
关注(0)|答案(1)|浏览(88)

我正试图创建一个计算器,这将填补3x 4表的文本框。三行中的每一行都将使用不同的变量进行计算。这将进行4次。
表单中的文本框包括:
textBox11、textBox21、textBox31、textBox41
textBox12、textBox22、textBox32、textBox42
textBox13、textBox23、textBox33、textBox43
我可以把基本上只有一栏的内容写满。
这个方法的作用是:

double var1 = Convert.ToDouble(tb_value1.Text, CultureInfo.InvariantCulture);
double var2 = Convert.ToDouble(tb_value2.Text, CultureInfo.InvariantCulture);
double var3 = Convert.ToDouble(tb_value3.Text, CultureInfo.InvariantCulture);

int WP = 1;

var S1 = Math.Pow((var2 - var1) * WP, 2);
var S2 = Math.Pow(4 + var3, 2);
var S3 = Math.Pow(var1, 2);
 
var Calc1 = (S1 * (var2 / 3));
var Calc2 = (S1 * S3) / WP;
var Calc3 = var3 + var1 * (S2 / WP);

textBox11.Text = Calc1.ToString(CultureInfo.CreateSpecificCulture("en-GB"));
textBox12.Text = Calc2.ToString(CultureInfo.CreateSpecificCulture("en-GB"));
textBox13.Text = Calc3.ToString(CultureInfo.CreateSpecificCulture("en-GB"));

字符串
该代码成功地计算了一列三个不同的结果。
WP用于变量S1-S3Calc1-Calc3
问题是我如何让它在for循环中工作,其中WP是循环的变量。
就像这样

double var1 = Convert.ToDouble(tb_value1.Text, CultureInfo.InvariantCulture);
double var2 = Convert.ToDouble(tb_value2.Text, CultureInfo.InvariantCulture);
double var3 = Convert.ToDouble(tb_value3.Text, CultureInfo.InvariantCulture);

for ( WP = 1; WP <= 4; WP++)
                {
                    var S1 = Math.Pow((var2 - var1) * WP, 2);
                    var S2 = Math.Pow(4 + var3, 2);
                    var S3 = Math.Pow(var1, 2);
 
                    var Calc1 = (S1 * (var2 / 3));
                    var Calc2 = (S1 * S3) / WP;
                    var Calc3 = var3 + var1 * (S2 / WP);

                    textBox11.Text = Calc1.ToString(CultureInfo.CreateSpecificCulture("en-GB"));
                    textBox12.Text = Calc2.ToString(CultureInfo.CreateSpecificCulture("en-GB"));
                    textBox13.Text = Calc3.ToString(CultureInfo.CreateSpecificCulture("en-GB"));
                }


使用for循环,假设循环4次,为四(4)列中的每一列提供三(3)个结果。
问题是我不知道如何以最有效的方式做到这一点。
我的第一次尝试是尝试将“textBox”之后的第一个数字作为变量,如下所示:

String.Format("textBox{0}1", WP)


但很可能我做错了什么。

lp0sw83n

lp0sw83n1#

首先,您需要将单个TextBox变量转换为一个或多个可以索引的数组。

TextBox[][] textBoxOutputGroups = new[]
{
    new [] { textBox11, textBox12, textBox13, },
    new [] { textBox21, textBox22, textBox23, },
    new [] { textBox31, textBox32, textBox33, },
    new [] { textBox41, textBox42, textBox43, },
};

字符串
现在,您可以重写代码,将结果输出到网格的正确行/列中:

double var1 = Convert.ToDouble(tb_value1.Text, CultureInfo.InvariantCulture);
double var2 = Convert.ToDouble(tb_value2.Text, CultureInfo.InvariantCulture);
double var3 = Convert.ToDouble(tb_value3.Text, CultureInfo.InvariantCulture);

for (int WP = 1; WP <= 4; WP++)
{
    var S1 = Math.Pow((var2 - var1) * WP, 2);
    var S2 = Math.Pow(4 + var3, 2);
    var S3 = Math.Pow(var1, 2);

    double[] outputValues = new[]
    {
        S1 * var2 / 3,
        S1 * S3 / WP,
        var3 + var1 * S2 / WP,
    };

    for (int i = 0; i < outputValues.Length; i++)
    {
        textBoxOutputGroups[WP - 1][i].Text =
            outputValues[i].ToString(CultureInfo.CreateSpecificCulture("en-GB"));
    }
}


您的公式不需要制作输入或计算的数组。

相关问题