我最近做了一个C# WinForm计算器项目,它填充了一个3x4的文本框块。像这样:
3x4 block of text boxes in the form pluss the input TextBoxes
这是代码:
private void calculate_Click(object sender, EventArgs e)
{
TextBox[][] textBoxOutputGroups = new[]
{
new [] { tb_Stress111, tb_Stress112, tb_Stress113, },
new [] { tb_Stress121, tb_Stress122, tb_Stress123, },
new [] { tb_Stress131, tb_Stress132, tb_Stress133, },
new [] { tb_Stress141, tb_Stress142, tb_Stress143, },
};
if (TextBox1.Text == "" || TextBox2.Text == "")
{
MessageBox.Show("Some textboxes are empty!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
double var1;
double var2;
double var3;
var1 = Convert.ToDouble(TextBox1.Text, CultureInfo.InvariantCulture);
var2 = Convert.ToDouble(TextBox2.Text, CultureInfo.InvariantCulture);
if (TextBox3.Text == "")
{
var3 = (-0.007 * var1 * 2) + 1.8;
}
else
{
var3 = Convert.ToDouble(TextBox3.Text, CultureInfo.InvariantCulture);
}
for (int WP = 0; WP <= 3; 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][i].Text =
outputValues[i].ToString(CultureInfo.CreateSpecificCulture("en-GB"));
}
}
}
}
字符串
这一个应该填补了一组12个文本框。
我现在要做的是添加额外的5组3x4文本框组,其输出将根据包含'j'变量的新循环的条件进行填充和修改,还将添加新的tadd
变量。
大概是这样的:
TextBox[][] textBoxOutputGroups = new[]
{
new [] { tb_Stress111, tb_Stress112, tb_Stress113, },
new [] { tb_Stress121, tb_Stress122, tb_Stress123, },
new [] { tb_Stress131, tb_Stress132, tb_Stress133, },
new [] { tb_Stress141, tb_Stress142, tb_Stress143, },
new [] { tb_Stress211, tb_Stress212, tb_Stress213, },
new [] { tb_Stress221, tb_Stress222, tb_Stress223, },
new [] { tb_Stress231, tb_Stress232, tb_Stress233, },
new [] { tb_Stress241, tb_Stress242, tb_Stress243, },
new [] { tb_Stress311, tb_Stress312, tb_Stress313, },
new [] { tb_Stress321, tb_Stress322, tb_Stress323, },
new [] { tb_Stress331, tb_Stress332, tb_Stress333, },
new [] { tb_Stress341, tb_Stress342, tb_Stress343, },
new [] { tb_Stress411, tb_Stress412, tb_Stress413, },
new [] { tb_Stress421, tb_Stress422, tb_Stress423, },
new [] { tb_Stress431, tb_Stress432, tb_Stress433, },
new [] { tb_Stress441, tb_Stress442, tb_Stress443, },
new [] { tb_Stress511, tb_Stress512, tb_Stress513, },
new [] { tb_Stress521, tb_Stress522, tb_Stress523, },
new [] { tb_Stress531, tb_Stress532, tb_Stress533, },
new [] { tb_Stress541, tb_Stress542, tb_Stress543, },
new [] { tb_Stress611, tb_Stress612, tb_Stress613, },
new [] { tb_Stress621, tb_Stress622, tb_Stress623, },
new [] { tb_Stress631, tb_Stress632, tb_Stress633, },
new [] { tb_Stress641, tb_Stress642, tb_Stress643, },
new [] { tb_Stress711, tb_Stress712, tb_Stress713, },
new [] { tb_Stress721, tb_Stress722, tb_Stress723, },
new [] { tb_Stress731, tb_Stress732, tb_Stress733, },
new [] { tb_Stress741, tb_Stress742, tb_Stress743, },
new [] { tb_Stress811, tb_Stress812, tb_Stress813, },
new [] { tb_Stress821, tb_Stress822, tb_Stress823, },
new [] { tb_Stress831, tb_Stress832, tb_Stress833, },
new [] { tb_Stress841, tb_Stress842, tb_Stress843, },
new [] { tb_Stress911, tb_Stress912, tb_Stress913, },
new [] { tb_Stress921, tb_Stress922, tb_Stress923, },
new [] { tb_Stress931, tb_Stress932, tb_Stress933, },
new [] { tb_Stress941, tb_Stress942, tb_Stress943, },
new [] { tb_Stress1011, tb_Stress1012, tb_Stress1013, },
new [] { tb_Stress1021, tb_Stress1022, tb_Stress1023, },
new [] { tb_Stress1031, tb_Stress1032, tb_Stress1033, },
new [] { tb_Stress1041, tb_Stress1042, tb_Stress1043, },
new [] { tb_Stress1111, tb_Stress1112, tb_Stress1113, },
new [] { tb_Stress1121, tb_Stress1122, tb_Stress1123, },
new [] { tb_Stress1131, tb_Stress1132, tb_Stress1133, },
new [] { tb_Stress1141, tb_Stress1142, tb_Stress1143, },
new [] { tb_Stress1211, tb_Stress1212, tb_Stress1213, },
new [] { tb_Stress1221, tb_Stress1222, tb_Stress1223, },
new [] { tb_Stress1231, tb_Stress1232, tb_Stress1233, },
new [] { tb_Stress1241, tb_Stress1242, tb_Stress1243, },
};
if (tb_AorticInnerRadious.Text == "" || tb_BloodPressureSystolic.Text == "")
{
MessageBox.Show("Some textboxes are empty!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
double var1;
double var2;
double var3;
var1 = Convert.ToDouble(tb_AorticInnerRadious.Text, CultureInfo.InvariantCulture);
var2 = Convert.ToDouble(tb_BloodPressureSystolic.Text, CultureInfo.InvariantCulture);
if (tb_AorticWallThickness.Text == "")
{
var3 = (-0.007 * var1 * 2) + 1.8;
}
else
{
var3 = Convert.ToDouble(tb_AorticWallThickness.Text, CultureInfo.InvariantCulture);
}
var tadd = ((1.25 * var3) - var3) / 6;
for(int j = 1; j < 6; j++)
{
if(j > 1)
{
var3 = var3 + (((Math.Abs(7 - j) * (-1)) + 6) * tadd);
}
for (int WP = 0; WP <= 3; 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][i].Text =
outputValues[i].ToString(CultureInfo.CreateSpecificCulture("en-GB"));
}
}
}
型
上面的这个只填充了原始textBoxOutputGroups中的文本框,其余的为空。
除非有更好的选择,否则除了添加额外的textBoxOutputGroups
或将所有新的文本框添加到现有的组中之外,我看不到其他方法。
我该怎么做?
2条答案
按热度按时间xnifntxz1#
试试这个方法。
创建一个自定义的UserControl(我将其命名为
TextBoxesBlock
)。该UserControl应该代表一组3x4的TextBox:的数据
对于每个TextBox,设置一个
Tag
属性,其中包含TextBox的编号(从1到12),例如:的
标记将用于正确地计算和排序控件,以在代码隐藏中构建TextBox的二维3x4数组。该支持数组将用于计算(确切地说,通过“行”(Stress)和“列”(Wall Place)的索引轻松访问具体的TextBox)。
此外,在UserControl的代码隐藏中提供了计算方法。从您的示例中假设,计算一半取决于某些用户输入值,一半取决于以前的
TextBoxesBlock
,所以我决定使用该参数作为方法参数:TextBoxesBlock.cs:
字符串
在另一个表单中,我添加了FlowLayoutPanel(下面的
flp1
),它将包含TextBoxesBlock
s,并添加了其中的6个:型
最后,在按钮处理程序中,您只需从FlowLayoutPanel接收
TextBoxesBlock
的列表,并在每个列表上迭代调用Calculate
方法并提供必要的参数(arguments)。由于您没有为var1
,var2
和var3
提供初始值,因此我只为所有TextBoxesBlock
添加1:型
结果我得到:
的
也许不是一个“现成的复制”解决方案,但我希望你会得到的想法。
btxsgosb2#
我同意让一个UserControl来表示每个3x4块更有意义,但是你已经表明你想保持当前的设置。
考虑到这一点,您可以通过使用
Controls.Find()
和递归搜索选项“按名称”搜索每个TextBox。它可以归结为:
字符串
请注意,如果您为组输入两位数,则当前命名约定可能会导致错误的TextBox。
要解决这个问题,你可以在数字中使用前导零,或者用另一个字符(如
.
或_
)分隔它们:型