我有一个表格,可让您将多个产品ID添加到购买中。 screenshot!
启动程序时,这里是what you see!
因此,每次您按下加号按钮另一行appears!。
为了避免过多的代码行,我决定创建一个函数,使其使用数字或按下加号按钮的行并加1它,以便出现下一行。
现在它返回带有代码的字符串,但是我不知道如何执行它。.
我已经搜索了如何执行字符串,但是该解决方案永远无法应用于我的代码。
//function
public string plus(int n)
{
string r="";
r = "label" + (n + 1) + ".Visible = true;";
r += "combobox" + (n + 1) + ".Visible = true;";
r += "plusButton" + (n + 1) + ".Visible = true;";
r += "minusButton" + (n + 1) + ".Visible = true;";
return r;
}
//plus button
private void plus1_Click(object sender, EventArgs e)
{
//code to execute (plus(1));
}
非常感谢您的意见和建议,解决方案甚至更多!
答案 0 :(得分:1)
从字符串执行c#表达式确实不是一个好主意,在这种情况下也不是您想要的。您可以看到this post以获得详细的答案,但实际上不应该。
我建议您将所有组件存储在这样的集合中。
public void plus(int n)
{
labelsArray[n].Visible =
comboboxArray[n].Visible =
plusButtonArray[n].Visible =
minusButtonArray[n].Visible = true;
}
private void plus1_Click(object sender, EventArgs e)
{
plus(1);
}
您还需要声明新的数组来索引您的控件,并用它们填充它们。例如,为您标记数组:
private Label[] labelsArray;
// Replace Form1 with the name of your class. This the constructor of your form.
public Form1()
{
labelsArray = new [] {label1, label2, label3, ... };
}
最终,您还可以动态创建这些控件,而不用切换其可见性。
答案 1 :(得分:0)
您不需要将代码定义为字符串。有很多更好的方法可以做到这一点。如果您不想将控件保存在单独的集合中,并且所有控件都是Form
的子控件,则可以使用以下功能运行相同的代码:
public void plus(int n)
{
((Label)this.Controls.Find("label" + (n + 1), false)[0]).Visible = true;
((ComboBox)this.Controls.Find("combobox" + (n + 1), false)[0]).Visible = true;
((Button)this.Controls.Find("plusButton" + (n + 1), false)[0]).Visible = true;
((Button)this.Controls.Find("minusButton" + (n + 1), false)[0]).Visible = true;
}