【发布时间】:2018-06-30 09:58:26
【问题描述】:
我有一个值为 4-9 的组合框,根据该值我想生成运行时标签和文本框。当我点击 6 时,代码可以根据需要生成 6 个标签和文本框,但是当我再次点击 5 时,一个标签和文本框应该消失,或者如果我再次点击 4,2 个标签和文本框应该消失......这不是正在发生。我在 c# 中有这段代码。我应该在此代码中进行哪些更改?有没有其他方法可以执行此代码?
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.Text == "4")
{
checkBox1.Visible = true;
for (int i = 0; i < 4; i++)
{
addlabel(i);
}
for (int i1 = 0; i1 < 4; i1++)
{
addlabel1(i1);
}
}
if (comboBox1.Text == "5")
{
checkBox1.Visible = true;
for (int i = 0; i < 5; i++)
{
addlabel(i);
}
for (int i1 = 0; i1 < 5; i1++)
{
addlabel1(i1);
}
}
if (comboBox1.Text == "6")
{
checkBox1.Visible = true;
for (int i = 0; i < 6; i++)
{
addlabel(i);
}
for (int i1 = 0; i1 < 6; i1++)
{
addlabel1(i1);
}
}
}
void addlabel(int i)
{
int left = 70;
int top = 100;
int step_x = 80;
int step_y = 30;
new Label()
{
Name = $"label{i}",
Text = "Enter Subject:",
Location = new Point(left, top + step_y * i),
Parent = this,
};
left += step_x;
int left1 = 357;
int top1 = 100;
int step_x1 = 80;
int step_y1 = 30;
new Label()
{
Name = $"label{i}",
Text = "Total Marks:",
Location = new Point(left1, top1 + step_y1 * i),
Parent = this,
};
left1 += step_x1;
}
void addlabel1(int i1)
{
int left = 200;
int top = 100;
int step_x = 80;
int step_y = 30;
new TextBox()
{
Name = $"textbox{i1}",
Text = "",
Size = new Size(122, 20),
Location = new Point(left, top + step_y * i1),
Parent = this,
};
left += step_x;
int left1 = 480;
int top1 = 100;
int step_x1 = 80;
int step_y1 = 30;
new TextBox()
{
Name = $"textbox{i1}",
Text = "",
Size = new Size(122, 20),
Location = new Point(left1, top1 + step_y1 * i1),
Parent = this,
};
left1 += step_x1;
}
有什么建议吗?帮帮我。
【问题讨论】:
-
你试过设置断点和调试你的代码吗?你认为是什么问题?
-
另外,虽然我在批评,但这里有很多代码,哪些位是不需要的?请阅读How to create a Minimal, Complete, and Verifiable example。您有 2 种方法,称为
addlabel和addlabel1,这对任何人或您自己都没有帮助。你也不妨阅读这个Navigating through Code with the Debugger -
非常感谢。我将为此编写一个最少的代码,但现在我需要帮助解决这个问题。你能帮我吗..我认为问题出在addlabel函数本身..我想我应该给出一些条件来检查combobox的值是否再次改变......但我真的不知道我应该怎么放一起...
-
将它们添加到面板中...这样您就可以处理面板以便重新开始...只是一个想法
-
另外请注意,您可以从组合框中获取该数字并将其转换为整数并将其用作 for 循环的最大值,这样您就不需要一遍又一遍地重复相同的代码. DRY