如何执行由函数返回的字符串

时间:2019-03-27 13:26:49

标签: c# winforms

我有一个表格,可让您将多个产品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));
        }

非常感谢您的意见和建议,解决方案甚至更多!

2 个答案:

答案 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;
}